クラスa
では、setter
定義されています。classb
を拡張する classa
には、クラスが参照できないprivate
変数があります。このコードの in クラスは、変数に到達できないため、最初の値とは異なる値に変数を設定するa
ことsetter
はありません。このコードを実行すると、ケース A に対して が出力されます。a
test
0
ただし、ケース 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
を認識できず、その値を設定できない場合、エラー、例外、警告、または小さな通知さえも表示されないのはなぜですか?
これは、実際のプロジェクトで私に起こった状況であり、エラーが生成されず、コードが論理的に正しいように見えるため、見つけるのが困難でした。では、今後この種のミスを防ぐにはどうすればよいでしょうか。