クラス定義:
はキーワード class で始まり、その後にクラス名が続きます。クラス名は、PHP 予約語以外の任意の名前にすることができます。その後に 1 対の中括弧が続き、クラス メンバーとメソッドの定義が含まれます。
疑似変数 $this
は、 オブジェクト 内でメソッドが呼び出されるときに使用できます。 $this は呼び出し元オブジェクトへの参照です (通常はメソッドが属するオブジェクトですが、メソッドが 2 番目のオブジェクト内から静的に呼び出される場合は別のオブジェクトになることもあります)。
//??静的呼び出しの内部関数は何ですか?
例を見てください:
class A
{
function foo ( )
{
if (isset($this)) {
echo '$this が定義されています (';
echo get_class($this);
echo ")n";
」 $this は定義されていません。n";
A::foo();
}
}
$a = new A();
$a->; foo();
A::foo() ;
$b = new B();
$b->bar();
B::bar();
出力結果は次のとおりです。
$this は定義されています (a)
$this は定義されていません。
$this は定義されています (b)
$this は定義されていません。
/*これだけは知っておきたい サンプルメモリの具体的な実装などが理解できません。わかりやすく説明できる人がいたら教えてください。寮の牛頭は今冬眠中です、目が覚めたら聞いてみます。 */
new
オブジェクトのインスタンスを作成するには、新しいオブジェクトを作成して変数に割り当てる必要があります。新しいオブジェクトには、オブジェクトがコンストラクターを定義し、エラーで例外がスローされない限り、作成時に常に値が割り当てられます。
オブジェクトの既に作成されたインスタンスを新しい変数に割り当てると、新しい変数はオブジェクトに割り当てられた場合と同じインスタンスにアクセスします。この動作は、インスタンスを関数に渡すときと同じです。クローン作成を使用して、すでに作成されたオブジェクトの新しいインスタンスを作成できます。
(短い文ですが、わかりにくいかもしれません。)
例は次のとおりです。
class SimpleClass
{ // メンバー宣言
public $var = 'デフォルト値';
// メソッド宣言
public function displayVar() {
echo $this->var;
}}
//下の図を見てください。1>new はヒープ (ヒープ) 内のオブジェクトをインスタンス化します。 2> ポインタ $instance を彼に指す
$instance = new SimpleClass();
//3> ポインタ $assigned をヒープ内のインスタンス化されたオブジェクトに指す
$ assign = $instance;
//4>$instance のリファレンス (アドレス) を $reference
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // 5> $instance とヒープ内のインスタンス間の接続を中断します。
var_dump($instance);
var_dump($reference);var_dump($assigned);
出力:
NULLNULL
object(SimpleClass)#1 (1) { ["var"]=>
string(30) "$assigned will have this value"
}
図プロセス全体:
クラス継承 extends
クラスは、宣言内で extends キーワードを使用して、別のクラスのメソッドとメンバーを継承できます。複数のクラスを拡張することはできません。継承できるのは 1 つの基本クラスのみです。
継承されたメソッドとメンバーは、親クラスがメソッドの定義時に Final キーワードを使用しない限り、同じ名前で再宣言することでオーバーライドできます。オーバーライドされたメソッドまたはメンバーには、parent:: を通じてアクセスできます。
(継承の仕組みは何ですか?)
ソースコードは次のとおりです:
class ExtendClass extends SimpleClass
// 親を再定義しますMethod function displayVar() { echo "クラスn の拡張";parent::displayVar();
}
}$extended = new ExtendClass();
$extended->displayVar();
出力:
クラスの拡張
デフォルト値