<?php
class test{
private $s;
function test(){
$this->d="test";
}
}
$c=new test();
?>
我的设置为error_reporting = E_ALL | E_STRICT
并且php仍然没有注意到这个问题!我该怎么做才能让php为这些类型的错误抛出异常
答案 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;
}
}