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 に答える