Heim > Artikel > Backend-Entwicklung > Objektorientierte PHP-Programmierung – Spezialpraxis TAG 4
Spezielle Praktiken für Objekte
(nur in PHP verfügbar, andere Sprachen haben keine Objekte )
Für Objekte - magische Methoden
__construct(), __destruct() Konstruktor und Destruktor
__tostring()
__invoke()
__call(), __callStatic()
__get(), __set(), __isset() , __unset( )
__clone()
__tostring()
Wenn das Objekt als String verwendet wird, wird diese Methode automatisch aufgerufen.
Echo $obj;
__invoke()
Wenn das Objekt als Methode aufgerufen wird, wird diese Methode automatisch aufgerufen
$obj(4);
<?php class MagicTest{ //__tostring会在把<strong>对象</strong>转换为string的时候自动调用 public function __tostring(){ return "This is the Class MagicTest. "; } // __invoke会在把<strong>对象</strong>当作一个方法调用的时候自动调用 public function __invoke($x){ echo "__invoke called with parameter ".$x."\n"; } } $obj = new MagicTest(); echo $obj."\n"; $obj(5); ?>
Ausgabe:
Dies ist die Klasse MagicTest
__invoke, die mit Parameter 5
__call() Wenn
Objekt auf einen nicht vorhandenen Methodennamen zugreift, wird die __call()-Methode automatisch __callStatic()
aufgerufen. Wenn
Objekt auf einen nicht vorhandenen statische Methode Name, die __callStatic()-Methode wird automatisch aufgerufen Diese beiden Methoden werden in PHP auch als Methodenüberladung bezeichnet Achten Sie darauf, zwischen Überschreibungen zu unterscheiden
Durch diese beiden Methoden wird der Aufruf von Der gleiche Methodenname kann entsprechend verschiedenen Methoden implementiert werden
<?php class MagicTest{ public function __tostring(){ return "This is the Class MagicTest. "; } public function __invoke($x){ echo "__invoke called with parameter ".$x."\n"; } //方法的重载 //这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组 public function __call($name,$arguments){ echo "Calling " . $name . " with parameters: ". implode(",", $arguments)."\n"; } //<strong>静态方法</strong>的重载,注意这个方法需要设定为static public static function __callStatic($name,$arguments){ echo "Static Calling " . $name . " with parameters: ". implode(",", $arguments)."\n"; } } $obj = new MagicTest(); //runTest这两个方法的名称本来不能完全相同,但是通过魔术方法,可以调用了 $obj->runTest("para1","para2"); //没有声明这个runTest方法,因为有__call这个魔术方法,也可以被调用 MagicTest::runTest("para1","para2"); //没有声明这个runTest方法,因为有__callStatic这个魔术方法,也可以被调用 ?>
Statischer Aufruf von runTest mit Parametern: para1, para2
Beim Zuweisen von Werten zu unzugänglichen Eigenschaften wird __set() aufgerufen
Wann Beim Lesen des Werts eines unzugänglichen Attributs wird __get() aufgerufen.
Wenn isset() oder empty() für ein unzugängliches Attribut aufgerufen wird, wird __isset() aufgerufen.
Wenn ein unzugängliches Attribut aufgerufen wird. Wenn unset( ) wird aufgerufen, __unset() wird aufgerufen
Das sogenannte unzugängliche Attribut bedeutet tatsächlich, dass beim Aufrufen eines bestimmten Attributs festgestellt wird, dass das Attribut zu diesem Zeitpunkt nicht definiert ist. Verschiedene Vorgänge lösen unterschiedliche magische Methoden aus
Diese Methoden werden auch als magische Methoden der Eigenschaftsüberladung bezeichnet
Ausgabe:
<?php class MagicTest{ public function __tostring(){ return "This is the Class MagicTest. "; } public function __invoke($x){ echo "__invoke called with parameter ".$x."\n"; } //方法的重载 //这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组 public function __call($name,$arguments){ echo "Calling " . $name . "with parameters: ". implode(",", $arguments)."\n"; } //<strong>静态方法</strong>的重载,注意这个方法需要设定为static public static function __callStatic($name,$arguments){ echo "Static Calling " . $name . "with parameters: ". implode(",", $arguments)."\n"; } //属性重载 public function __get($name){ return "Getting the property ".$name."\n"; } public function __set($name, $value){ echo "Setting the property ".$name." to value " . $value."\n"; } public function __isset($name){ echo "__isset invoked\n"; return true; } public function __unset($name){ echo "unsetting property ".$name."\n"; } } $obj = new MagicTest(); echo $obj->className."\n"; //className未定义,但是通过魔术方法__get,这个方法好像被定义了一样 $obj->className='MagicClassX'; //通过魔术方法__get将className名称定义为MagicClassX echo '$obj->name is set?'.isset($obj->className)."\n"; echo '$obj->name is empty?'.empty($obj->className)."\n"; unset($obj->className); ?>Eigenschaft className abrufen
--Magische Methode__clone()name='TBD'; //屏蔽你不想要他复制过去的数据,屏蔽掉他的数据,设置他的初始值
}
}
$james = new NbaPlayer();
$james->name = 'James';
echo $james->name."\n";
$james2 = clone $james;
echo "Before set up: James2's: ".$james2->name."\n";
$james2->name='James2';
echo "James's: ".$james->name;
echo "James's: ".$james2->name;
?>James
Vor der Einrichtung: James2: TBD
James: James
James: James2 //Die Daten von James2 haben keinen Einfluss auf die Daten von James
--------------------------------------------- - ------------------------------------------------- -PHP für
Objekt
Damit sind die Programmierhinweise abgeschlossen----------------------------------- ----- --------------------------------------------- -----
Das Obige ist eine Einführung in die objektorientierte PHP-Programmierung – Spezialpraxis TAG 4, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.