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

时间:2011-10-17 09:37:59

标签: php

有没有办法检查文件中是否存在类而不包含/要求类?

类似于:class_in_file($file);

正如我已经提到的,我知道这可以通过要求/包括课程,然后查找class_exists($class);,但是以其他任何方式完成吗?

4 个答案:

答案 0 :(得分:9)

$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

答案 1 :(得分:2)

一个php文件是一个文本文件,你可以打开它并解析它以便找到一个 课堂宣言。

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

你必须删除注释行,包含类声明的字符串可以触发误报,heredocs往往会使事情变得更复杂。也应该考虑到逃避。

如果你有权使用命令行php解释器,那么你可以看一下-w开关,它可以为你做好一半的工作来删除注释和空格。

答案 2 :(得分:1)

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

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

并使用preg_match阅读前几行。

答案 3 :(得分:0)

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