Statisches statisches Schlüsselwort
statisch. In einer Klasse gehören die von ihr markierten Variablen oder Methoden zu keinem Objekt. Verwenden Sie beim Zugriff „::“. Und wenn Sie self in einer Klasse aufrufen, verwenden Sie „self::“
Zum Beispiel:
<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>
Statische Methoden können auch dynamisch über Variablen aufgerufen werden.
<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>
Zugriffskontrolle wird durch die Schlüsselwörter public, protected und private implementiert. Auf Klassenmitglieder, die als öffentlich definiert sind, kann von überall aus zugegriffen werden. Auf ein als geschützt definiertes Klassenmitglied kann von ihm selbst und seinen Unterklassen und übergeordneten Klassen zugegriffen werden. Als privat definierte Klassenmitglieder können nur von der Klasse aufgerufen werden, in der sie definiert sind.
Klassenattribute müssen als öffentlich, geschützt oder privat definiert werden.
Methoden in einer Klasse können als öffentlich, privat oder geschützt definiert werden. Wenn diese Schlüsselwörter nicht festgelegt sind, ist die Methode standardmäßig öffentlich.
Wenn der Konstruktor als private Methode definiert ist, darf das Objekt derzeit nicht direkt instanziiert werden. Diese Methode wird häufig in Entwurfsmustern verwendet, um die Erstellung zu steuern Das Singleton-Muster erlaubt beispielsweise nur ein global eindeutiges Objekt.
<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>
Überladung in PHP bezieht sich auf die dynamische Erstellung von Eigenschaften und Methoden, die implementiert sind durch magische Methoden. Beim Überladen von Attributen werden __set, __get, __isset und __unset verwendet, um die Zuweisung zu implementieren, zu lesen, zu bestimmen, ob das Attribut festgelegt ist, bzw. das Attribut zu zerstören, wenn es nicht vorhanden ist.
<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>
Das Überladen von Methoden wird durch __call implementiert. Beim Aufruf einer nicht vorhandenen Methode wird die __call-Methode als Parameter aufgerufen. Beim Aufruf einer nicht vorhandenen statischen Methode wird __callStatic aufgerufen Überlastung verwendet.
<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>
Objektvergleich: Wenn alle Attribute zweier Instanzen derselben Klasse gleich sind, können Sie den Vergleichsoperator „==“ verwenden. Wenn Sie beurteilen müssen, ob zwei Variablen auf dasselbe Objekt verweisen, können Sie zur Beurteilung den Kongruenzoperator „===“ verwenden.
<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>
Objektkopieren. In einigen Sonderfällen können Sie ein Objekt über das Schlüsselwort clone kopieren. Zu diesem Zeitpunkt wird die __clone-Methode aufgerufen und der Wert des Attributs wird über diese magische Methode festgelegt .
<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>
Objektserialisierung: Sie können das Objekt über die Serialisierungsmethode, die zum Speichern oder Übertragen von Daten verwendet wird, in eine Zeichenfolge serialisieren und die Zeichenfolge dann in ein Objekt deserialisieren, um sie bei Bedarf durch unserialisieren zu verwenden.
<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>
Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.
Das Obige hat die Programmiertechnologie für mobile App-Schnittstellen vorgestellt. Ich hoffe, dass es für Freunde, die sich für PHP-Tutorials interessieren, hilfreich sein wird, andere Funktionen der PHP-Klasse zu implementieren.