<?php
class test{
private $s;
function test(){
$this->d="test";
}
}
$c=new test();
?>
我的设置是error_reporting = E_ALL | E_STRICT
并且php仍然没有注意到这个问题!我该怎么做才能使 php 针对这些类型的错误抛出异常
<?php
class test{
private $s;
function test(){
$this->d="test";
}
}
$c=new test();
?>
我的设置是error_reporting = E_ALL | E_STRICT
并且php仍然没有注意到这个问题!我该怎么做才能使 php 针对这些类型的错误抛出异常
它不是错误。如果你试图调用一个未定义的方法,php 会发疯,但在这种情况下,php 很乐意将该语句作为声明。
<?php
class test{
private $s;
function test(){
$this->d="test";
}
}
$c=new test();
echo $c->d; //"test"
?>
访问一个不存在的属性被认为是错误的 (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;
}
}