//オブジェクトが複製されたときに自動的に呼び出されるメソッド。複製後に元のオブジェクトの内容を変更したい場合は、__clone() で元の
属性とメソッドを書き直す必要があります。 function __clone(){
//$this はコピー p2 を参照し、$that は元の p1 を参照するため、このメソッドではコピーの属性が変更されます。
$this->name="私は偽の$that->name";
$this->age=30
}
}
$p1=new person("张三", "男" 、 20);
$p2=クローン $p1;
$p2->say();
上記の例の出力:
実行結果
私の名前: Zhang San 性別: 男性 私の年齢: 20
私の名前: 私は偽 Zhang San 性別: 男性 私の年齢: 30
18 .__call は呼び出しエラーを処理します
プログラム開発において、オブジェクトを使用してオブジェクトの内部メソッドを呼び出すときに、呼び出されたメソッドが存在しない場合、プログラムはエラーとなり、プログラムは終了して実行を続行できません。したがって、プログラムがオブジェクト内に存在しないメソッドを呼び出す場合、呼び出されたメソッドと使用されたパラメータが存在しないことを示すプロンプトが表示されますが、現時点ではプログラムの実行を続行することができます。この場合、自動呼び出しを使用する必要があります。メソッド「__call()」が存在しません。
コードスニペット
コードをコピー
コードは次のとおりです: //これはテストクラスであり、属性やメソッドはありません
class Test{
}
//テストクラスオブジェクトを生成する
$test=new Test();
//オブジェクトに存在しないメソッドを呼び出す
$test->demo("one", "two", "three"); /プログラムはここでは実行されません
echo "this is a test
?>
上記の例では次のエラーが発生し、プログラムは実行を続行できません
致命的なエラー: 未定義への呼び出しメソッド Test::demo()
以下に「__call()」メソッドを追加しましょう。このメソッドには 2 つのパラメータがあります。最初のパラメータは、__call() メソッドが存在しないときに呼び出します。自動的に呼び出される場合、3 番目のパラメータには存在しないメソッドのメソッド名が渡され、2 番目のパラメータにはこのメソッドの複数のパラメータが配列の形式で渡されます。
コードスニペット
コードをコピー
コードは次のとおりです:
//これはテストクラスであり、それには属性やメソッドはありませんclass Test{ //自動的に実行される存在しないメソッドの呼び出し 呼び出されたメソッド、最初のパラメータはメソッド名、2 番目のパラメータは配列パラメータです
function __call($function_name, $args){
print "呼び出した関数: $function_name(parameters: " ;
print_r($ args);
print ") は存在しません!
n";
}
}
//Test クラスのオブジェクトを生成します
$test=new Test();オブジェクトに存在しないメソッドです
$test->demo("one", "two", "three");
//プログラムは終了せず、ここで実行できます
echo "これはテストです< br>";
?>
上記の例の出力結果は次のとおりです:
実行結果
呼び出した関数: Demon (パラメータ: Array ( [0] => one [1] => two [2] => 3 ) ) は存在しません!
これはテストです。
http://www.bkjia.com/PHPjc/320630.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/320630.html技術記事 16.__toString()メソッド 前にも書きましたが、クラス内で「-」で始まるメソッド名を宣言したメソッド(PHPから提供されています)は、あるタイミングで別の状況下で自動的に呼び出されて実行されます...