静的静的キーワード
静的。 クラスでは、クラスによってマークされた変数またはメソッドはどのオブジェクトにも属しません。アクセスする際は「::」を使用してください。クラス内で self を呼び出すときは、「self::」を使用します
例:
<code><span><span><?php</span><span><span>class</span><span>Car</span> {</span><span>private</span><span>static</span><span>$speed</span> = <span>10</span>; <span>public</span><span><span>function</span><span>getSpeed</span><span>()</span> {</span><span>return</span><span>self</span>::<span>$speed</span>; } <span>//在这里定义一个静态方法,实现速度累加10</span><span>public</span><span>static</span><span><span>function</span><span>speedUp</span><span>()</span> {</span><span>return</span><span>self</span>::<span>$speed</span> += <span>10</span>; } } <span>$car</span> = <span>new</span> Car(); Car::speedUp(); <span>//调用静态方法加速</span><span>echo</span><span>$car</span>->getSpeed(); <span>//调用共有方法输出当前的速度值</span></span></span></code>
静的メソッドは、変数を通じて動的に呼び出すこともできます。
<code><span>$func</span> = <span>'getSpeed'</span>; <span>$className</span> = <span>'Car'</span>; <span>echo</span><span>$className</span>::<span>$func</span>(); <span>//动态调用静态方法</span></code>
アクセス制御は、キーワード public、protected、private によって実装されます。 public として定義されたクラス メンバーにはどこからでもアクセスできます。 protected として定義されたクラス メンバーは、それ自体、そのサブクラス、およびその親クラスからアクセスできます。プライベートとして定義されたクラス メンバーには、そのメンバーが定義されているクラスのみがアクセスできます。
クラス属性は、public、protected、private のいずれかとして定義する必要があります。
クラス内のメソッドは、パブリック、プライベート、または保護として定義できます。これらのキーワードが設定されていない場合、メソッドはデフォルトで public になります。
コンストラクターがプライベート メソッドとして定義されている場合、オブジェクトを直接インスタンス化することはできません。このメソッドは、オブジェクトの作成を制御するためにデザイン パターンでよく使用されます。シングルトン モードとして、グローバルに一意なオブジェクトは 1 つだけ許可されます。
<code><span><span>class</span><span>Car</span> {</span><span>private</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>echo</span><span>'object create'</span>; } <span>private</span><span>static</span><span>$_object</span> = <span>null</span>; <span>public</span><span>static</span><span><span>function</span><span>getInstance</span><span>()</span> {</span><span>if</span> (<span>empty</span>(<span>self</span>::<span>$_object</span>)) { <span>self</span>::<span>$_object</span> = <span>new</span> Car(); <span>//内部方法可以调用私有方法,因此这里可以创建对象</span> } <span>return</span><span>self</span>::<span>$_object</span>; } } <span>//$car = new Car(); //这里不允许直接实例化对象</span><span>$car</span> = Car::getInstance(); <span>//通过静态方法来获得一个实例</span></code>
<code><span><span><?php</span><span><span>class</span><span>Car</span> {</span><span>public</span><span>$speed</span> = <span>0</span>; <span>//汽车的起始速度是0</span><span>public</span><span><span>function</span><span>speedUp</span><span>()</span> {</span><span>$this</span>->speed += <span>10</span>; <span>return</span><span>$this</span>->speed; } } <span>//定义继承于Car的Truck类</span><span><span>class</span><span>Truck</span><span>extends</span><span>Car</span>{</span><span>public</span><span><span>function</span><span>speedUp</span><span>()</span> {</span><span>$this</span>->speed = <span>parent</span>::speedUp() + <span>50</span>; } } <span>$car</span> = <span>new</span> Truck(); <span>$car</span>->speedUp(); <span>echo</span><span>$car</span>->speed;</span></span></code>
PHP におけるオーバーロードとは、マジック メソッドによって実現されるプロパティとメソッドの動的な作成を指します。属性のオーバーロードでは、__set、__get、__isset、__unset を使用して、それぞれ割り当て、読み取り、属性が設定されているかどうかの判断、属性が存在しない場合の属性の破棄を実装します。
<code><span><span>class</span><span>Car</span> {</span><span>private</span><span>$ary</span> = <span>array</span>(); <span>public</span><span><span>function</span><span>__set</span><span>(<span>$key</span>, <span>$val</span>)</span> {</span><span>$this</span>->ary[<span>$key</span>] = <span>$val</span>; } <span>public</span><span><span>function</span><span>__get</span><span>(<span>$key</span>)</span> {</span><span>if</span> (<span>isset</span>(<span>$this</span>->ary[<span>$key</span>])) { <span>return</span><span>$this</span>->ary[<span>$key</span>]; } <span>return</span><span>null</span>; } <span>public</span><span><span>function</span><span>__isset</span><span>(<span>$key</span>)</span> {</span><span>if</span> (<span>isset</span>(<span>$this</span>->ary[<span>$key</span>])) { <span>return</span><span>true</span>; } <span>return</span><span>false</span>; } <span>public</span><span><span>function</span><span>__unset</span><span>(<span>$key</span>)</span> {</span><span>unset</span>(<span>$this</span>->ary[<span>$key</span>]); } } <span>$car</span> = <span>new</span> Car(); <span>$car</span>->name = <span>'汽车'</span>; <span>//name属性动态创建并赋值</span><span>echo</span><span>$car</span>->name; </code>
メソッドのオーバーロードは __call を通じて実装されます。存在しないメソッドが呼び出された場合、__call メソッドがパラメーターとして呼び出されます。存在しない静的メソッドが呼び出された場合は、__callStatic オーバーロードが使用されます。
<code>lass Car { <span>public</span><span>$speed</span> = <span>0</span>; <span>public</span><span><span>function</span><span>__call</span><span>(<span>$name</span>, <span>$args</span>)</span> {</span><span>if</span> (<span>$name</span> == <span>'speedUp'</span>) { <span>$this</span>->speed += <span>10</span>; } } } <span>$car</span> = <span>new</span> Car(); <span>$car</span>->speedUp(); <span>//调用不存在的方法会使用重载</span><span>echo</span><span>$car</span>->speed;</code>
同じクラスの2つのインスタンスのすべての属性が等しい場合、2つの変数が等しいかどうかを判断するために比較演算子「==」を使用できます。同じ オブジェクトを参照する場合、等価演算子「===」を使用して判断できます。
<code><span><span>class</span><span>Car</span> {</span> } <span>$a</span> = <span>new</span> Car(); <span>$b</span> = <span>new</span> Car(); <span>if</span> (<span>$a</span> == <span>$b</span>) <span>echo</span><span>'=='</span>; <span>//true</span><span>if</span> (<span>$a</span> === <span>$b</span>) <span>echo</span><span>'==='</span>; <span>//false</span></code>
オブジェクトのコピー。一部の特殊なケースでは、キーワード clone を使用してオブジェクトをコピーできます。このとき、__clone メソッドが呼び出され、このマジック メソッドを通じて属性の値が設定されます。
<code><span><span>class</span><span>Car</span> {</span><span>public</span><span>$name</span> = <span>'car'</span>; <span>public</span><span><span>function</span><span>__clone</span><span>()</span> {</span><span>$obj</span> = <span>new</span> Car(); <span>$obj</span>->name = <span>$this</span>->name; } } <span>$a</span> = <span>new</span> Car(); <span>$a</span>->name = <span>'new car'</span>; <span>$b</span> = <span>clone</span><span>$a</span>; var_dump(<span>$b</span>); </code>
オブジェクトのシリアル化では、データの保存または転送に使用される Serialize メソッドを通じてオブジェクトを文字列にシリアル化し、必要に応じてその文字列をシリアル化解除して使用できるオブジェクトに逆シリアル化できます。
<code><span><span>class</span><span>Car</span> {</span><span>public</span><span>$name</span> = <span>'car'</span>; } <span>$a</span> = <span>new</span> Car(); <span>$str</span> = serialize(<span>$a</span>); <span>//对象序列化成字符串</span><span>echo</span><span>$str</span>.<span>'<br>'</span>; <span>$b</span> = unserialize(<span>$str</span>); <span>//反序列化为对象</span> var_dump(<span>$b</span>); </code>
著作権に関する声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。
上記では、モバイル アプリ インターフェイスのプログラミング テクノロジを紹介します。PHP クラスの他の機能の実装方法を学習し、PHP チュートリアルに興味のある友人に役立つことを願っています。