PHP5 オブジェクトには、オブジェクト内の他のメソッドを監視するために使用される新しい専用メソッド __call() があります。存在しないオブジェクト、またはアクセス許可が制御されているオブジェクトのメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。
1. __call
<?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?>
の使用2. __callを使用して「オーバーロード」アクションを実装します
<?php class Magic { function __call($name,$arguments) { if($name=='foo') { if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); } } private function foo_for_int($x) { print("oh an int!"); } private function foo_for_string($x) { print("oh a string!"); } } $x = new Magic(); $x->foo(3); $x->foo("3"); ?>
3. 2つの関数_callと__callStaticは、PHPクラス
のデフォルト関数です。__call( ) オブジェクトのコンテキストで、呼び出されたメソッドにアクセスできない場合、トリガーされます
__callStatic() 静的コンテキストで、呼び出されたメソッドにアクセスできない場合、トリガーされます
<?php abstract class Obj { protected $property = array(); abstract protected function show(); public function __call($name,$value) { if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array)) { $this->property[$array[1]] = $value[0]; return; } elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array)) { return $this->property[$array[1]]; } else { exit("<br>;Bad function name '$name' "); } } } class User extends Obj { public function show() { print ("Username: ".$this->property['Username']."<br>;"); //print ("Username: ".$this->getUsername()."<br>;"); print ("Sex: ".$this->property['Sex']."<br>;"); print ("Age: ".$this->property['Age']."<br>;"); } } class Car extends Obj { public function show() { print ("Model: ".$this->property['Model']."<br>;"); print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;"); } } $user = new User; $user ->setUsername("Anny"); $user ->setSex("girl"); $user ->setAge(20); $user ->show(); print("<br>;<br>;"); $car = new Car; $car ->setModel("BW600"); $car ->setNumber(5); $car ->setPrice(40000); $car ->show(); ?>
概要:
__call() 関数は、PHP クラスのデフォルトのマジック関数であり、オブジェクトのコンテキストでは、呼び出されたメソッドが存在しない場合に __call() がトリガーされます。関連する推奨事項:
PHP で __call() と __callStatic() を使用する方法
PHP で __call() メソッドを使用する方法とオーバーロード インスタンス分析
php のマジック メソッドの詳細な説明__get()、__set()、__call()、__callStatic() と静的使用法
マジックメソッド __call() の例の詳細な説明 (php 上級オブジェクト指向チュートリアル)
以上がPHP で __call() を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。