PHP类奇怪的行为

时间:2012-04-09 22:45:08

标签: php class object

我想知道这是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

我知道OkWorldalias,但它是对servers\testing\HelloWord的引用,这是一个有效的类......

由于

3 个答案:

答案 0 :(得分:3)

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

OKWorld不是一个类,它是一个别名,只要它存在,解释器就会用HelloWord替换它。但是解释器不会搜索字符串,因此函数class_exists将获得字符串OKWorld并搜索相应的类,该类实际上并不存在!实际存在的是别名。

答案 1 :(得分:2)

如果OkWorld,则返回false是有效的,因为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);

答案 2 :(得分:0)

OkWorld不是一个班级;它是命名空间别名。实际的班级是HelloWord