php類這樣寫多餘嗎?

來源:互聯網
上載者:User
關鍵字 php
class test{    function aaa(){        echo "多餘麼";    }}

經常遇到這樣類定義之後,在其他地方沒有執行個體化也沒有調用(全域搜尋找不到類test或者函數aaa)。
既然沒有用到的地方為什麼要定義呢?
定義了,如果有用到的話是哪裡調用的?

回複內容:

class test{    function aaa(){        echo "多餘麼";    }}

經常遇到這樣類定義之後,在其他地方沒有執行個體化也沒有調用(全域搜尋找不到類test或者函數aaa)。
既然沒有用到的地方為什麼要定義呢?
定義了,如果有用到的話是哪裡調用的?

類調用一定要new嗎,調用方法一定要顯性寫出來方法名?

可能是動態調用,可能是回調,這些都是隱形的調用。

test類的話,更可能是測試類別,在項目中不會使用,供開發人員測試的。

php是支援反射的好嘛,就是允許運行時動態提供類名、函數名來裝載和調用相關類方法的好嘛~
作為動態語言,類名完全可以取自使用者輸入之類的,然後動態載入,幹嘛寫代碼裡?
比如你弄個外掛程式系統,名為xxx的外掛程式就放在/plugin/xxx/xxx.php,然後外掛程式的類名就叫xxx,擁有一個方法叫init,所以代碼裡寫的就是類似:

$a=擷取plugin目錄下的檔案夾名稱列表();foreach($a as $i){    $file="/plugin/$i/$i.php";    if(file_exists($file)) include($file);else{...}    if(class_exists($i)) $t=new $i();else{...}    if(method_exists($t,'init')) $t->init();else{...}}

這樣就完成了全部外掛程式的載入並初始化,可是原始碼中完全沒有出現xxx這個字串,不就是這麼個道理麼。

@MrGeneral 的答案很贊,php 有反射
補充一點,一種可能是曆史遺留代碼,在過去的代碼中會使用這段代碼,但是重構(修改代碼使用)之後,就不使用一些舊代碼了,也沒人刪除掉,就這麼一直留著。

存在即合理。

我想有可能 在你用的架構中使用的是 call_user_func 調用的。

全域搜尋沒有,不代表這個沒被用到啊.
你要是不很確定可以嘗試注釋掉先,不過根據以往經驗,建議別做沒用的事兒,如果這個類或者函數僅僅是沒用,那麼它並不佔什麼資源,最多你注釋下這東西可能沒用就好了.
千萬別刪代碼,千萬別刪代碼,千萬別...

你在__construct()裡面寫上 echo '調用?';exit;

然後看看程式跑起來的樣子(當然有可能並不是在啟動中被調用,而是在某一個很猥瑣的角落特定的環境情境下中才調用)

xdebug斷點也是一樣的道理。

可能是final類

測試代碼

$class = $_GET['name'];// $class = 'test';$method = $_GET['method'];// $method = 'aaa';$myclass = new $class();$myclass->$method();/** *定義tst類 */class test{    function aaa()    {        echo __CLASS__."->".__METHOD__.PHP_EOL;    }}

通過瀏覽器訪問:

http://hostname/seg.php?name=test&method=aaa

這裡命名不規範,只是為了說明問題。
執行個體化的過程這個實現方式你就看不到。

如果是注入式架構的話,類沒有找到被調用的地方也是正常的

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.