1

これが abugまたはwrong implementation.....かどうかを知りたいですclass_exist

私のクラス

namespace servers\testing ;

class HelloWord
{
    function hello()
    {
        echo "hello World" ;
    }
}

テスト

use servers\testing\HelloWord as OkWorld ;

$okWolrd = new OkWorld() ;
$helloWorld  = new \servers\testing\HelloWord() ;

var_dump($okWolrd);  //object(servers\testing\HelloWord)[1]
var_dump(class_exists('servers\testing\HelloWord')); //true 
var_dump(class_exists('OkWorld')); //false


$declearedClasses = get_declared_classes() ;

var_dump(in_array('servers\testing\HelloWord', $declearedClasses)); //true
var_dump(in_array('OkWorld', $declearedClasses)); //false


var_dump($okWolrd instanceof $helloWorld); //true but OkWolrd needed to be initiated before it works

質問

それOkWordは有効なPHPクラスではないということですか?? 正常に動作することに注意してくださいnew OkWorld()

OkWordが減速なしで存在することをどのように確認しますか?

編集 1

私はそれが有効なクラスであることを知っていますOkWorld...aliasservers\testing\HelloWord

ありがとう

4

3 に答える 3

3

バグでも間違った実装でもないと思います。

OKWorldはクラスではなく、エイリアスです。インタープリターは、HelloWord存在するたびにそれを置き換えます。しかし、インタープリターは文字列を検索しないため、関数class_existsは文字列を取得し、OKWorld実際には存在しない対応するクラスを検索します! 実際に存在するのはエイリアスです。

于 2012-04-09T22:54:17.300 に答える
2

実際のクラスではなくエイリアスであるためOkWorldクラスが有効かどうかを確認するために false を返します。代わりにinstanceofOkWorldを使用してみることができます:

// Not sure if this works (haven't used namespace aliases yet)
//var_dump('OkWorld' instanceof HelloWorld); // No GOOD - Throws fatal

// This will work
$okWorld = new OkWorld();
var_dump($okWorld instanceof HelloWorld);
于 2012-04-09T22:52:41.680 に答える
0

OkWorldクラスではありません。これは名前空間のエイリアスです。実際のクラスはHelloWord.

于 2012-04-09T22:52:28.640 に答える