ホームページ >バックエンド開発 >PHPチュートリアル >PHP で __call() を使用する方法

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

墨辰丷
墨辰丷オリジナル
2018-05-16 14:35:303334ブラウズ

この記事では主に PHP での __call() の使い方を紹介します。興味のある方はぜひ参考にしてください。

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();  
?>

この特別なメソッドを使用すると、JAVA で「オーバーロード」アクションを実装できるため、パラメーターを確認し、プライベート メソッドを呼び出して渡すことができます。

例 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");  
?>

引用元:

_call と ___callStatic は、呼び出された場合、PHP クラスのデフォルト関数です。メソッドにアクセスできない場合、トリガーされます

__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();  
?>

関連推奨事項:

PHP 開発 (17) )-callback-readdir-is_dir-foreach-glob-PhpStorm

java-concurrency-Callable、Future、FutureTask

php-メンバー関数 assign() の呼び出し

以上がPHP で __call() を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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