PHP オブジェクト指向ガイド (11) __toString() の使用法、オブジェクトのクローン作成、呼び出しエラーの __call 処理
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;
上記の出力例: こんにちは
キーワードを使用してオブジェクトを再作成する場合、これはより面倒でエラーが発生しやすいため、オブジェクトから同一のオブジェクトを完全にクローンすることが非常に必要であり、クローン作成後、2 つのオブジェクト
は互いに干渉しません。
PHP5 では、「clone」キーワードを使用してオブジェクトのクローンを作成します。
コード スニペット
コードをコピー
コードは次のとおりです。 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
";
?>
上記の例では次のエラーが発生し、プログラムは実行を続行できません。
以下に「__call()」メソッドを追加しましょう。このメソッドには 2 つのパラメータがあります。最初のパラメータは、__call( を自動的に呼び出すプロセス中に、存在しないメソッド
を呼び出します。 ) メソッドには、存在しないメソッドのメソッド名を渡します。最初のパラメーターには、2 番目のパラメーター
に、このメソッドの複数のパラメーターを配列の形式で渡します。
コード スニペット
コードをコピー コードは次のとおりです:
//Thisはテストクラスであり、その中には属性やメソッドはありません。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>";
?>
上記の例の出力結果は次のとおりです: 実行結果
呼び出した関数: demo(Parameter: Array ( [0 ] => 1 [1] => 2 [2 ] => 3 ) は存在しません。
これはテストです。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









