1
<?php

    class test{
        private $s;

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

    $c=new test();

?>

我的设置是error_reporting = E_ALL | E_STRICT

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

4

2 回答 2

0

它不是错误。如果你试图调用一个未定义的方法,php 会发疯,但在这种情况下,php 很乐意将该语句作为声明。

<?php

    class test{
        private $s;

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

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

?>
于 2013-08-07T02:13:08.693 回答
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;
  }
}
于 2013-08-07T02:39:24.740 回答