ホームページ  >  記事  >  バックエンド開発  >  PHP で __call() を使用する方法

PHP で __call() を使用する方法

墨辰丷
墨辰丷オリジナル
2018-05-09 15:07:2527216ブラウズ

PHP5 オブジェクトには、オブジェクト内の他のメソッドを監視するために使用される新しい専用メソッド __call() があります。存在しないオブジェクト、またはアクセス許可が制御されているオブジェクトのメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。

1. __call

<?php  
class foo {  
  function __call($name,$arguments) {  
    print("Did you call me? I&#39;m $name!");  
  }  
} $x = new foo();  
$x->doStuff();  
$x->fancy_stuff();  
?>

の使用2. __callを使用して「オーバーロード」アクションを実装します

<?php  
class Magic {  
  function __call($name,$arguments) {  
    if($name==&#39;foo&#39;) {  
  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 &#39;$name&#39; ");  
}  
  
}  
}  
  
class User extends Obj  
{  
public function show()  
{  
print ("Username: ".$this->property[&#39;Username&#39;]."<br>;");  
//print ("Username: ".$this->getUsername()."<br>;");  
print ("Sex: ".$this->property[&#39;Sex&#39;]."<br>;");  
print ("Age: ".$this->property[&#39;Age&#39;]."<br>;");  
}  
}  
  
class Car extends Obj  
{  
public function show()  
{  
print ("Model: ".$this->property[&#39;Model&#39;]."<br>;");  
print ("Sum: ".$this->property[&#39;Number&#39;] * $this ->property[&#39;Price&#39;]."<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。