16.__toString() メソッド
クラス (PHP から提供された) 内で「-」で始まるメソッド名の宣言方法が、ある時点で異なると前述しました
この場合、実行メソッドは自動的に呼び出されます。先ほど、オブジェクト参照がポインタであると述べましたが、これは
がオブジェクト参照を直接出力するときにも自動的に呼び出されます。 : "$ p=new
person()"、$p は参照です。$p を直接出力するために echo を使用することはできません。これにより、「キャッチ可能な致命的な
エラー: クラス パーソンのオブジェクトを変換できませんでした」が出力されます。このエラーのように、クラス内に
「__toString()」メソッドを定義しておけば、オブジェクト参照を直接出力する際にエラーは発生せず、代わりに
「__toString()」メソッドが自動的に出力されます。呼び出され、出力 "__toString()" メソッドで返される文字なので、"__toString()" メソッドには戻り値 (return ステートメント)
が必要です。
コード スニペット
コードをコピー コードは次のとおりです:
// 宣言単純なクラス
class TestClass{
public $foo;
public function __construct($foo) {
$this->foo = $foo>}
//定義__toString メソッド、メンバー属性を返します $foo
public function __toString() {
return $this->foo
}
}
$class = new TestClass('Hello' ) ;
// オブジェクトを直接出力します
echo $class;
上記の出力例: こんにちは
コードは次のとおりです。 <class person{
//以下は人物のメンバー属性ですvar $name //人物の名前
var $sex;人の性別
var $age; // 人の年齢
// 属性名 $name、性別 $sex 、年齢 $age
に値を割り当てるコンストラクター パラメーターを定義します。 __construct($name="", $sex ="", $age=""){
$this->name=$name;
$this->sex=$sex; $this->age=$age;
}
//この人が話す方法は、属性を伝えることです。
function Say() {
echo "私の名前は: ".$ this->name." 性別: ".$this->sex." 私の年齢: ".$this->age."
";
}
}
$p1=new Person( "Zhang San", " Male", 20);
//「clone」を使用して、p1 オブジェクトと同じプロパティとメソッドを持つ新しいオブジェクト p2 を複製します。
$p2=clone $p1;
$p2->say();
PHP5 は特別なメソッド名「__clone()」を定義しますオブジェクトのクローン作成時に自動的に呼び出されるメソッド。
の内容を変更する場合は、「__clone()」メソッドを使用します。クローン作成後の元のオブジェクト。元の属性とメソッドは __clone() で書き換える必要があります。「__clone()」メソッドにはパラメータを含めることはできません。
これには、$this と $this が指す 2 つのポインターが自動的に含まれます。
コード スニペット
class person{ //以下は、var $name; //人の名前var $sex; //人の性別var $age; //その人の年齢
//コンストラクターパラメータを定義する 属性名 $name、性別 $sex 、年齢 $agefunction __construct($name="", $sex="", $age=""){
$this->name= $name;
$this->gt;age=$age;
//この人の話し方、自分の属性を伝える
function Say() {
echo "私の名前は: ".$this->name." 性別: ".$this- >sex." 私の年齢は: ".$this ->age."
";
}
//コンテンツを変更したい場合に自動的に呼び出されるメソッド。クローン作成後に元のオブジェクトを複製するには、__clone() で元のオブジェクトを書き直す必要があります。
関数 __clone() の属性とメソッド {
//$this はコピー p2 を参照し、$that はコピー p2 を参照します。したがって、このメソッドでは、コピーの属性が変更されます。
$this->name="私は偽の $that->name";
$this->age=30;
}
}
$p1=新しい人("张三", "男", 20);
$p2=clone $p1;
$p2->say(); ?>
上記の例の出力:
実行結果
私の名前は: Zhang San 性別: 男性 私の年齢: 20
私の名前は: 私は偽 Zhang San です 性別: 男性 私の年齢は: 30
18.__call 呼び出しエラーの処理
プログラム開発において、オブジェクトを使用してオブジェクトの内部メソッドを呼び出すときに、呼び出されたメソッドが存在しない場合、プログラム
はエラーを発生し、その後プログラムが終了し、実行を続行できなくなります。したがって、プログラムがオブジェクト内に存在しないメソッド
を呼び出すと、呼び出されたメソッドと使用されたパラメーターが存在しないことを通知するプロンプトが表示されますが、この時点ではプログラムは実行を続行できます。 🎜> 呼び出し内に存在しないメソッドを使用します。メソッドが使用されると、メソッド「__call()」が自動的に呼び出されます。
コード スニペット
コードをコピー コードは次のとおりです:
//Thisはテスト クラスです。その中には属性やメソッドはありません。
class Test{
}
//テスト クラスのオブジェクトを生成します。
$test=new Test();呼び出し元のオブジェクトには存在しません。 Method
$test->demo("one", "two", "three")
//ここではプログラムは実行されません
echo "これはtest
";
?>
上記の例では次のエラーが発生し、プログラムは実行を続行できません。
コードをコピー コードは次のとおりです:
//Thisはテストクラスであり、その中には属性やメソッドはありません。