Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类奇怪的行为_Php_Class_Object - Fatal编程技术网

PHP类奇怪的行为

PHP类奇怪的行为,php,class,object,Php,Class,Object,我想知道这是一个错误还是错误的实现。。。。。我尝试检查是否存在class\u 我的班级 namespace servers\testing ; class HelloWord { function hello() { echo "hello World" ; } } 测试 use servers\testing\HelloWord as OkWorld ; $okWolrd = new OkWorld() ; $helloWorld = new \

我想知道这是一个
错误
还是
错误的实现
。。。。。我尝试检查是否存在
class\u

我的班级

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
是一个
别名
,但它是对
servers\testing\HelloWord
的引用,这是一个有效的类


谢谢

OkWorld
不是一门课;它是一个名称空间别名。实际的类是
HelloWord

OkWorld
不是类;它是一个名称空间别名。实际类是
HelloWord

返回false以检查
OkWorld
是否为有效,因为
OkWorld
是别名,而不是实际类。您可以尝试改用:


返回false检查
OkWorld
是否为是有效的,因为
OkWorld
是别名,而不是实际类。您可以尝试改用:


我认为这既不是一个bug,也不是一个错误的实现


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

我认为这既不是一个bug,也不是一个错误的实现



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

我同意这是一个
别名
,但您的代码只有在
OKWord
和initiated@MikePurcell第一个抛出致命(instanceof expects instance)@Poncha:有道理。别名基本上允许你简写类名,但是你仍然需要实例化它。在自动加载过程中会发生什么???这是不是意味着你必须实例化每个类,看看它是否存在??你怎么知道文件的路径???自动加载与你遇到的问题没有任何关系,文件的路径也没有关系。您的自动加载器设置为查看由
include\u path
定义的某些目录。自动加载器仅使类可用,以便无需进行一次
require\u
调用即可访问这些类。如果你要使用一个对象,你仍然必须实例化它,除非你使用的是该对象的静态属性。我同意是一个
别名
,但你的代码只有在
OKWord
和initiated@MikePurcell第一个抛出致命(instanceof expects instance)@Poncha:有道理。别名基本上允许你简写类名,但是你仍然需要实例化它。在自动加载过程中会发生什么???这是不是意味着你必须实例化每个类,看看它是否存在??你怎么知道文件的路径???自动加载与你遇到的问题没有任何关系,文件的路径也没有关系。您的自动加载器设置为查看由
include\u path
定义的某些目录。自动加载器仅使类可用,以便无需进行一次
require\u
调用即可访问这些类。如果你要处理一个对象,你仍然必须实例化它,除非你处理的是这个对象的静态属性。我知道。。。问题是如何验证该别名是否存在。。。因为它被视为有效的Class@Baba:为什么要测试别名是否存在?你想完成什么?好的,这只能通过反射来完成。你有一个REST服务,用户需要远程指向一个类。。。而不必放置名称空间。。它的清洁剂使用别名。。。如果您想开发和自动加载classed..的另一个示例。。并使用别名而不是完整路径。。什么happens@Baba:自动加载不使用别名。您可以通过添加
函数uu autoload($class){var_dump($class);}
并尝试使用别名类来检查这一点。传递给自动加载器的内容是原始类而不是别名。+1。。。。不错的一个@drrcknlsn。。。。我注意到自动加载根本没有捕获别名。。这意味着谁。。。您不能
自动加载
别名。。。这比我当时预料的要糟糕得多…我知道。。。问题是如何验证该别名是否存在。。。因为它被视为有效的Class@Baba:为什么要测试别名是否存在?你想完成什么?好的,这只能通过反射来完成。你有一个REST服务,用户需要远程指向一个类。。。而不必放置名称空间。。它的清洁剂使用别名。。。如果您想开发和自动加载classed..的另一个示例。。并使用别名而不是完整路径。。什么happens@Baba:自动加载不使用别名。您可以通过添加
函数uu autoload($class){var_dump($class);}
并尝试使用别名类来检查这一点。传递给自动加载器的内容是原始类而不是别名。+1。。。。不错的一个@drrcknlsn。。。。我注意到自动加载根本没有捕获别名。。这意味着谁。。。您不能
自动加载
别名。。。这比我当时预料的要糟糕得多请
// 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);