我想知道这是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
的引用,这是一个有效的类......
由于
答案 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
。