PHP のクラス継承で問題が発生しており、その原因と回避策について混乱しています。以下のコードを見てください。
class Vehicle {
public $properties = array();
public function funky($property) {
echo json_encode($this->properties) . PHP_EOL;
echo json_encode(isset($this->properties[$property])) . PHP_EOL;
echo json_encode($this->properties[$property]) . PHP_EOL;
}
}
class Car extends Vehicle {
public $properties = array('colour' => null, 'size' => null, 'fuel' => null);
}
$car = new Car();
$car->funky('colour');
これは以下を出力します:
{"colour":null,"size":null,"fuel":null}
false
null
配列がnull以外の値で初期化されている代わりに、この子クラスを試してみると:
class Car extends Vehicle {
public $properties = array('colour' => 'blue', 'size' => 8, 'fuel' => 'gas');
}
それから私は実際に私が期待するものを手に入れます:
{"colour":"blue","size":8,"fuel":"gas"}
true
"blue"
これは本当に意味がありません。私の推測では、子クラスが null 値で配列を初期化する場合、実際に配列要素を作成することはあまり気にしません。ただし、これは、PHP が変数を処理する方法と矛盾します。例えば:
$ar = array('takis' => null);
echo json_encode(isset($ar));
これは「true」を出力します!それについて合理的な説明はありますか?回避策として何を提案しますか?
前もって感謝します :-)