【问题标题】:PHP variable inheritance issuePHP变量继承问题
【发布时间】:2013-11-11 10:39:12
【问题描述】:

我在 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

如果我尝试使用这个子类,而不是使用非空值初始化数组:

    class Car extends Vehicle {
        public $properties = array('colour' => 'blue', 'size' => 8, 'fuel' => 'gas');
    }

然后我实际上得到了我的期望:

    {"colour":"blue","size":8,"fuel":"gas"}
    true
    "blue"

这对我来说真的没有意义。我的猜测是,如果子类使用空值初始化数组,那么它并不真正关心实际创建数组元素。但是,这与 PHP 处理变量的方式相冲突。例如:

    $ar = array('takis' => null);
    echo json_encode(isset($ar));

这打印“真”! 对此有合理的解释吗?您会建议什么解决方法?

提前谢谢你:-)

【问题讨论】:

  • isset($ar)); $ar 已设置为什么它会打印除 true 以外的任何内容?
  • $ar 包含一个元素,这个元素的值为 null 无关紧要,这就是 echo json_encode(isset($ar)); 的原因打印 TRUE。
  • 习惯echo json_encode(..) . PHP_EOL,而不是var_dump(..)

标签: php arrays variables inheritance null


【解决方案1】:

isset如果变量存在则返回true而不是null,否则返回false
如果您需要检查数组索引是否存在而不管其值如何,请使用array_key_exists

另见The Definitive Guide To PHP's isset And empty

【讨论】:

猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多