2011-10-17 50 views
5

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

喜欢的东西:class_in_file($file);

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

+0

哦,不....因为它剧照需要文件,以检查是否在该文件中存在的类....不然怎么回事就它知道吗?如果你有一个class_in_file,它仍然需要读取文件。 – Flukey

+2

如果你解释为什么你认为你需要这个,它会帮助很多人。 – CodeCaster

+0

@Jamie我认为他的意思是'include'和'require',它们不同于只读文件。 – deceze

回答

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

+0

我错过了那些功能,它们很棒。感谢那些信息 – Eineki

+0

性能明智,包括/需要文件有什么区别?我认为这两种方法都必须加载整个文件。 – olanod

+0

@Dann表现明智,包括该文件会快得多。但OP显然不想这样做。 – deceze

0

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

2

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

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

你必须重拳出击注释行,包含类声明的字符串可以触发误报,here文档往往使事情更加复杂。 Evals也应该考虑在内。

如果你有机会到PHP命令行解释器,那么你可以看看这条意见和空格为你做侑以良好的工作一半你-w开关。

1

简短的答案是否定的。只有解决方法。例如,你可以分析自己的文件(可能使用token_get_all),或者在顶部像

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

评论莫名其妙地标记文件并读取头几行寻找这与preg_match

相关问题