-2

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」を出力します!それについて合理的な説明はありますか?回避策として何を提案しますか?

前もって感謝します :-)

4

1 に答える 1

0

issettrue変数が存在し、存在しないnull場合は を返します。それ以外の場合は を返しますfalse
値に関係なく配列インデックスが存在するかどうかを確認する必要がある場合は、 を使用しますarray_key_exists

The Definitive Guide To PHP's isset And emptyも参照してください。

于 2013-11-11T10:44:16.853 に答える