2016-04-04 18 views
0

2つのファイルがあります:index.phpをしてfoo.phpファイルがサブディレクトリ/ libにindex.phpの中に今クラスがPHPで宣言されていない場合、なぜ「新しい」スローエラーが発生しますか?

に置かれる をfoo.php、この機能

function bar(){ 
    require('foo.php'); 
    $foo = new Foo(); 
    $foo->bar(); 
} 

にしていますそして今foo.php

class Foo{ 
    public function __construct(){ 
     echo "baz"; 
    } 

    public function bar(){ 
    echo "bar"; 
    } 

} 

に、エラーが発見するのは難しいです:私は、Fooクラスを必要にエラーをした代わりにrequire('lib/foo.php')ので、私は書いているだけrequire('foo.php')

このエラーは、特に多くのコード行がある場合には、実際には見つけにくいです。

今すぐクラスの宣言はエラーを投げるべきですか?

エラー$foo = new Foo();にエラーが発生すると、エラーが見つけやすくなります。この場合、Fatal error: Call to undefined method Foo::bar()と表示されます。「しかしメソッドと宣言しましたが、エラーはどこか他の場所にあることを忘れてしまいます。

だから、なぜ存在しない新しいクラスを作成する際にPHPがエラーを投げないのですか? PHP

+6

です。 https://3v4l.org/2as94。つまり、すでに定義されている同じ名前空間上に 'bar()'メソッドがない場合にのみ 'Foo'クラスが存在することを意味します。 –

+0

おそらく 'include_path'に' lib'ディレクトリを宣言しましたか? – Oldskool

+1

コメントが必要な場合は、まだ動作しているかどうかを確認してください。PHPが別の場所でPHPを見つけていることがわかっている場合は、 – DevDonkey

答えて

6

を使用すると、現在ロードされず、いずれかの自動ロードされていないクラスをインスタンス化しようとしているときに致命的なエラーをスローします。あなたの状況の最も可能性の高い説明は、のクラスはFooと宣言されていますが、それはあなたが期待するクラスFooではありません。

newに到達する前に、実際にrequireコールが先に死んでいたはずです。あなたはですfoo.phpに別のclass Fooを持っています。

関連する問題