2011-10-17 87 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

相關問題