<?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;
}
}