クラスaでは、setter定義されています。classbを拡張する classaには、クラスが参照できないprivate変数があります。このコードの in クラスは、変数に到達できないため、最初の値とは異なる値に変数を設定するaことsetterはありません。このコードを実行すると、ケース A に対して が出力されます。atest0
ただし、ケース B を実行するExceptionと、プロパティtest2が存在しないというメッセージが表示されます。
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
class a {
public function __set($prop, $value) {
if((!property_exists($this, $prop))) {
$className = get_called_class();
throw new Exception("The property `{$prop}` in `{$className}` does not exist");
}
$this->$prop = $value;
return true;
}
}
class b extends a {
private $test = 0;
public function getTest() {
return $this->test;
}
}
// Case A
$b = new b;
$b->test = 1;
echo $b->getTest();
// Case B
$b = new b;
$b->test2 = 2;
私の質問は、クラスaが実際に変数testを認識できず、その値を設定できない場合、エラー、例外、警告、または小さな通知さえも表示されないのはなぜですか?
これは、実際のプロジェクトで私に起こった状況であり、エラーが生成されず、コードが論理的に正しいように見えるため、見つけるのが困難でした。では、今後この種のミスを防ぐにはどうすればよいでしょうか。