php引用未定义的类属性不会抛出错误

时间:2013-08-07 02:00:30

标签: php

<?php

    class test{
        private $s;

        function test(){
        $this->d="test";
        }
    }

    $c=new test();

?>

我的设置为error_reporting = E_ALL | E_STRICT

并且php仍然没有注意到这个问题!我该怎么做才能让php为这些类型的错误抛出异常

2 个答案:

答案 0 :(得分:0)

这不是错误。如果您尝试调用未定义的方法,php会生气,但在这种情况下,php很乐意将该语句作为声明。

<?php

    class test{
        private $s;

        function test(){
        $this->d="test";
        }
    }

    $c=new test();
echo $c->d; //"test"

?>

答案 1 :(得分:0)

访问不存在的属性被视为错误(E_NOTICE),而设置一个属性只是按该名称创建公共属性。

<?php
error_reporting(E_ALL);

class foo
{
  public function __construct()
  {
    var_dump($this->a);
    $this->b = true;
  }
}

new foo;

会给你:

Notice: Undefined property: foo::$a on line 7
NULL 

如果你真的想要阻止这种行为,你可以挂钩访问未知属性时调用的魔术__get__set方法:

<?php
class foo
{
  public function __construct()
  {
    $this->doesNotExist = true;
  }

  public function __set($name, $val)
  {
    throw new Exception("Unknown property $name");
  }
}

如果你想一遍又一遍地这样做:

<?php
trait DisableAutoProps
{
  public function __get($name)
  {
    throw new Exception("Unknown property $name");
  }
  public function __set($name, $val)
  {
    throw new Exception("Unknown property $name");
  }
}

class foo
{
  use DisableAutoProps;

  public function __construct()
  {
    $this->doesNotExist = true;
  }
}