1

我想知道这是一个bug还是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是一个alias但它的引用servers\testing\HelloWord是一个有效的类......

谢谢

4

3 回答 3

3

我认为这既不是错误也不是错误的实现。

OKWorld不是一个类,它是一个别名,解释器将HelloWord在它存在时替换它。但是解释器不会搜索字符串,所以函数class_exists会获取字符串OKWorld并搜索对应的类,实际上并不存在!实际存在的是别名。

于 2012-04-09T22:54:17.300 回答
2

返回 false 以检查是否OkWorld是一个是有效的,因为OkWorld它是一个别名,而不是一个实际的类。您可以尝试使用instanceof代替:

// 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 回答