ホームページ > バックエンド開発 > PHPチュートリアル > PHP オブジェクト指向のキーポイント [翻訳済み]

PHP オブジェクト指向のキーポイント [翻訳済み]

WBOY
リリース: 2016-07-30 13:31:21
オリジナル
823 人が閲覧しました

  • __construct
<code><span><span><?php</span><span><span>class</span><span>ConstructTest</span> {</span><span>private</span><span>$arg1</span>;
    <span>private</span><span>$arg2</span>;

    <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span> {</span><span>$this</span>->arg1 = <span>$arg1</span>;
        <span>$this</span>->arg2 = <span>$arg2</span>;
        <span>print</span><span>"__construct is called...\n"</span>;
    }
    <span>public</span><span><span>function</span><span>printAttributes</span><span>()</span> {</span><span>print</span><span>'$arg1 = '</span>.<span>$this</span>->arg1.<span>' $arg2 = '</span>.<span>$this</span>->arg2.<span>"\n"</span>;
    }
}
<span>$testObject</span> = <span>new</span> ConstructTest(<span>"arg1"</span>,<span>"arg2"</span>); 
<span>$testObject</span>->printAttributes();</span></span></code>
ログイン後にコピー

実行結果は次のとおりです:

<code><span>Stephens</span>-<span>Air</span><span>:Desktop</span><span>$ </span>php <span>Test</span>.php 
__construct is called...
<span>$arg1</span> = arg1 <span>$arg2</span> = arg2</code>
ログイン後にコピー
  • parent

は、サブクラスの親クラスのメソッドを直接呼び出すために使用されます。

<code><span><span><?php</span><span><span>class</span><span>BaseClass</span> {</span><span>protected</span><span>$arg1</span>;
    <span>protected</span><span>$arg2</span>;

    <span><span>function</span><span>__construct</span><span>(<span>$arg1</span>, <span>$arg2</span>)</span> {</span><span>$this</span>->arg1 = <span>$arg1</span>;
        <span>$this</span>->arg2 = <span>$arg2</span>;
        <span>print</span><span>"__construct is called...\n"</span>;
    }
    <span><span>function</span><span>getAttributes</span><span>()</span> {</span><span>return</span><span>'$arg1 = '</span>.<span>$this</span>->arg1.<span>' $arg2 = '</span>.<span>$this</span>->arg2;
    }
}

<span><span>class</span><span>SubClass</span><span>extends</span><span>BaseClass</span> {</span><span>protected</span><span>$arg3</span>;

    <span><span>function</span><span>__construct</span><span>(<span>$baseArg1</span>, <span>$baseArg2</span>, <span>$subArg3</span>)</span> {</span><span>parent</span>::__construct(<span>$baseArg1</span>, <span>$baseArg2</span>);
        <span>$this</span>->arg3 = <span>$subArg3</span>;
    }
    <span><span>function</span><span>getAttributes</span><span>()</span> {</span><span>return</span><span>parent</span>::getAttributes().<span>' $arg3 = '</span>.<span>$this</span>->arg3;
    }
}
<span>$testObject</span> = <span>new</span> SubClass(<span>"arg1"</span>,<span>"arg2"</span>,<span>"arg3"</span>); 
<span>print</span><span>$testObject</span>->getAttributes().<span>"\n"</span>;</span></span></code>
ログイン後にコピー

実行結果は次のとおりです:

<code><span>Stephens</span>-<span>Air</span><span>:Desktop</span><span>$ </span>php <span>Test</span>.php 
__construct is called...
<span>$arg1</span> = arg1 <span>$arg2</span> = arg2 <span>$arg3</span> = arg3</code>
ログイン後にコピー
  • 自分
    クラス内でクラスの静的メンバーと静的メソッドを呼び出すための接頭辞の変更、および非静的メンバーの変数と関数の場合はこれです。
rreee
  • 静的
    ここで紹介する static キーワードは、主に PHP 5.3 以降の新しい遅延静的バインディング機能で使用されます。
<code><span><span><?php</span><span><span>class</span><span>StaticExample</span> {</span><span>static</span><span>public</span><span>$arg1</span> = <span>"Hello, This is static field.\n"</span>;
    <span>static</span><span>public</span><span><span>function</span><span>sayHello</span><span>()</span> {</span><span>print</span><span>self</span>::<span>$arg1</span>;
    }
}

<span>print</span> StaticExample::<span>$arg1</span>;
StaticExample::sayHello();</span></code>
ログイン後にコピー

実行結果は次のとおりです:

<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>Base</span> {</span><span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>//这里的new static()实例化的是调用该静态方法的当前类。</span><span>return</span><span>new</span><span>static</span>();
    }
    <span>abstract</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span>;</span>}

<span><span>class</span><span>SubA</span><span>extends</span><span>Base</span> {</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span> {</span><span>print</span><span>"This is SubA::printSelf.\n"</span>;
    }
}

<span><span>class</span><span>SubB</span><span>extends</span><span>Base</span> {</span><span>public</span><span><span>function</span><span>printSelf</span><span>()</span> {</span><span>print</span><span>"This is SubB::printSelf.\n"</span>;
    }
}

SubA::getInstance()->printSelf();
SubB::getInstance()->printSelf();</span></span></code>
ログイン後にコピー

static キーワードはインスタンス化にのみ使用できるわけではありません。 self やparent と同様に、static は、非静的コンテキストからであっても、静的メソッド呼び出しの識別子として使用できます。このシナリオでは、self は現在のメソッドが配置されているクラスを表します。次のコードを参照してください:

<code>Stephens-Air:Desktop$ php Test.php 
This <span>is</span> SubA<span>::printSelf.</span>
This <span>is</span> SubB<span>::printSelf.</span></code>
ログイン後にコピー

実行結果は次のとおりです:

<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>Base</span> {</span><span>private</span><span>$ownedGroup</span>;
    <span>public</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>//这里的static和上面的例子一样,表示当前调用该方法的实际类。</span><span>//需要另外说明的是,这里的getGroup方法即便不是静态方法,也会得到相同的结果。然而倘若</span><span>//getGroup真的只是普通类方法,那么这里还是建议使用$this。</span><span>$this</span>->ownedGroup = <span>static</span>::getGroup();
    }
    <span>public</span><span><span>function</span><span>printGroup</span><span>()</span> {</span><span>print</span><span>"My Group is "</span>.<span>$this</span>->ownedGroup.<span>"\n"</span>;
    }
    <span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>return</span><span>new</span><span>static</span>();
    }
    <span>public</span><span>static</span><span><span>function</span><span>getGroup</span><span>()</span> {</span><span>return</span><span>"default"</span>;
    }
}

<span><span>class</span><span>SubA</span><span>extends</span><span>Base</span> {</span>
}

<span><span>class</span><span>SubB</span><span>extends</span><span>Base</span> {</span><span>public</span><span>static</span><span><span>function</span><span>getGroup</span><span>()</span> {</span><span>return</span><span>"SubB"</span>;
    }
}

SubA::getInstance()->printGroup();
SubB::getInstance()->printGroup(); </span></span></code>
ログイン後にコピー
  • __destruct
    デストラクター メソッドの役割は、構築メソッド __construct の逆です。このメソッドは、ガベージ コレクターによって収集される前にのみ自動的に呼び出されます。このメソッドを使用して、必要なクリーンアップ作業を実行できます。
<code>
Stephens-Air:Desktop$ php Test.php 
My <span>Group</span><span>is</span><span>default</span>
My <span>Group</span><span>is</span> SubB</code>
ログイン後にコピー

実行結果は次のとおりです:

<code><span><span><?php</span><span><span>class</span><span>TestClass</span> {</span><span><span>function</span><span>__destruct</span><span>()</span> {</span><span>print</span><span>"TestClass destructor is called.\n"</span>;
    }
}

<span>$testObj</span> = <span>new</span> TestClass();
<span>unset</span>(<span>$testObj</span>);
<span>print</span><span>"Application will exit.\n"</span>;</span></code>
ログイン後にコピー
  • __clone
    PHP 5 以降のバージョンでは、オブジェクト間の割り当ては参照割り当てです。つまり、割り当て後の 2 つのオブジェクトが同じアドレス空間を指すようになります。オブジェクトに基づいて値を割り当てたい場合は、PHP が提供する clone メソッドを使用できます。 。このメソッドは、浅いコピーの後に現在のオブジェクトのコピーを返します。ディープ コピーなど、クローン プロセス中にいくつかの特殊な操作を完了したい場合は、現在のクラスの宣言に __clone メソッドを実装する必要があります。クローンプロセス中に実行され、暗黙的に呼び出されます。さらに、__clone メソッドはコピーされるオブジェクト、つまり代入後のオブジェクトに対して実行されるという事実に特別な注意を払う必要があります。
rreee

実行結果は以下の通りです

<code>
Stephens<span>-Air</span>:Desktop$ php Test<span>.</span>php 
Before calling <span>to</span> clone<span>.</span>
__clone is called<span>.</span>
After calling <span>to</span> clone<span>.</span><span>In</span> outerA: <span>$id</span><span>=</span><span>20</span><span>In</span> outerB: <span>$id</span><span>=</span><span>10</span></code>
ログイン後にコピー
  • const
    PHP5可以在类中定义常量属性。和全局常量一样,一旦定义就不能改变。常量属性不需要像普通属性那样以访

    以上就介绍了php面向对象要点[转],包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート