PHP __call() メソッド

WBOY
WBOYオリジナル
2016-06-23 14:34:232655ブラウズ

ネットで見つけました。
引用元: http://bbs.17php.com/show_title.php?id=1443
PHP5 オブジェクトには、オブジェクト内の他のメソッドを監視するために使用される新しい特別なメソッド __call() があります。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。

例 7: __call

class foo {
function __call($name,$arguments) {
print("電話しましたか? 私は $name!"); $ x = new foo();
$x->fancy_stuff();

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

例 8: __call を使用して「オーバーロード」アクションを実装する

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]); }
} プライベート関数 foo_for_int($x) {
print("ああ int!");
} プライベート関数 foo_for_string($x) {
print("ああ 文字列!"); $x = new Magic ();
$x->foo("3");

から引用:

_call と ___callStatic は PHP クラスの 2 つの関数ですfunction,

__call() オブジェクトのコンテキストでは、呼び出されたメソッドにアクセスできない場合、トリガーされます
__callStatic() 静的コンテキストでは、呼び出されたメソッドがアクセスできない場合、トリガーされます

例:

抽象クラス Obj

{

protected $property = array();

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("/^get([a-z][a-z0-9]+)$/i",$name,$array))
{
return $this-> ; property[$array[1]];
}
else
{
exit("
;不正な関数名 '$name' ");
}

}
}

class ユーザーが Obj を拡張します
{
public function show()
{
print ("ユーザー名: ".$this->property['ユーザー名']."
;")
//print ("ユーザー名: ".$this- > ;getUsername()."
;");
print ("性別: ".$this->property['Sex']."
;");
print ("年齢: " .$this->property['Age']."
;");
}
}

class Car extends Obj
{
public function show()
{
print ("Model: " . $this->property['Model']."
;");
print ("合計: ".$this->property['Number'] * $this ->property[' 価格']."
;");
}
}

$user = 新しいユーザー;
$user ->setSex("girl");
$user ->setAge(20);
$user ->show();

$car = 新しい車; ->setModel("BW600");
$car ->setPrice(40000);

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