ホームページ >バックエンド開発 >PHPチュートリアル >PHPの基礎知識:クラスとオブジェクト(1)_PHPチュートリアル
クラスの定義:
キーワード class で始まり、その後にクラス名が続きます。クラス名は、PHP の予約語以外の任意の名前にすることができます。その後に 1 対の中括弧が続き、クラス メンバーとメソッドの定義が含まれます。
疑似変数 $this
は、 オブジェクト 内でメソッドが呼び出されるときに使用できます。 $this は呼び出し元オブジェクトへの参照です (通常はメソッドが属するオブジェクトですが、メソッドが 2 番目のオブジェクト内から静的に呼び出される場合は別のオブジェクトになることもあります)。态 // ?? 静的呼び出しの内部は何ですか?
例を見てください: Class a
{
FUNCTION FOO () { if (isset ($ this)) {
echo '$ これは定義されています(';
echo get_class($this);
function bar ()
{
A::foo();
}
}
$a = 新しい 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 ヒープ (heap) 内のオブジェクトをインスタンス化します。 。 2> ポインタ $instance を彼に指す
$instance = new SimpleClass();//3> ポインタ $assigned をヒープ内のインスタンス化されたオブジェクトに指す
$assigned = $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
{ // 親メソッドを再定義
{ echo "Extending classn";parent :: displayVar(); }}
$extended = new ExtendClass();
$extended->displayVar();
出力:
拡張クラス
デフォルト値