检查文件中是否存在不需要/包含的类


check if class exists within file without requiring/including

是否有一种方法可以检查类是否存在于文件中而不包括/要求类?

例如:class_in_file($file);

正如我已经提到的,我知道这可以通过要求/包括类,然后查找class_exists($class);来完成,但还有其他方法吗?

$tokens = token_get_all(file_get_contents('foo.php'));

然后遍历令牌,看看是否可以找到特定的T_CLASS条目。

http://www.php.net/manual/en/function.token-get-all.php
http://www.php.net/manual/en/tokens.php

php文件是一个文本文件,您可以打开它并解析它,以便找到一个类声明。

这不是一个简单的过程,但是一个好的解析器应该使这个任务变得微不足道。

必须去掉注释行,包含类声明的字符串可能会触发误报,这会使事情变得更加复杂。评价也应考虑在内。

如果您可以访问命令行PHP解释器,那么您可以查看-w开关,它可以为您删除注释和空白,为您完成一半的工作。

简短的回答是否定的。只有变通的办法。例如,您可以自己解析文件(可能使用token_get_all),或者可能在顶部以某种方式用注释标记文件,如

<?php
/** #has_class(CLASSNAME)
 */ 

和阅读前几行寻找这个与preg_match .

PHP只有在加载(解析)了定义这些类的文件(假设它们不是内置的)后才会知道哪些类存在。如果您有一个明确定义的结构(也许您正在使用自动加载),您可以通过检查定义类的文件是否存在来检查类是否存在。例如,if (file_exists('<path to app>/lib/Myapp/Util/Http.php'))可以用来检查Myapp_Util_Http类是否存在于你的应用程序目录中。但是不能保证类确实存在于该文件中。为此,您必须包含/要求它,读取并解析它,或者使用自动加载并尝试使用它。