簡體   English   中英

PHP包含/ require內部函數

[英]PHP include/require inside functions

擁有相當大的函數並且每次加載頁面時都會加載它們,最好編寫function foo(){ include(.../file_with_function's_code); return; } function foo(){ include(.../file_with_function's_code); return; } function foo(){ include(.../file_with_function's_code); return; }最小化函數腳本的大小? 或者無關緊要,因為當一個函數被加載(但沒有執行)時,即使它被包含在內,也會加載內容? 謝謝。

(編輯:我的問題不是關於它是否可能)

雖然@Luceos答案在技術上是正確的(最好的正確),但它沒有回答你問的問題,即更好地做到這一點,還是包括無論函數調用發生的事情?

我用最基本的方式測試了這個(OP,為什么不是你?):

<?php
echo "Testing...";

function doThing() {
    include nonExistantFile.php;
}
//doThing();
echo "Done testing.";

結果:

如果我打電話給doThing(); 我收到一個未找到文件的警告。

如果我注釋掉doThing(); ......沒有錯誤! 這樣你就可以節省文件加載時間。

或者,作為一個很好的替代方案,將您的函數封裝在類中,並從__autoload獲益:

function __autoload($class_name) {
    include $class_name . '.php';
}

myBigFunction()封裝在一個類中

class myBigFunction {
  public static function run() {
    //the old code goes here
  }
}

將其保存為myBigFunction.php

當您在類上調用該函數作為靜態方法時:

myBigFunction::run()

__autoload將加載文件,但不會在此之前加載。

是的,這是可能的; http://www.php.net/manual/en/function.include.php

如果include發生在調用文件中的函數內部,則調用文件中包含的所有代碼將表現為就好像已在該函數內定義的那樣。 因此,它將遵循該函數的可變范圍。

問題是,為什么不將周圍的函數定義添加到包含的文件中。 我認為在函數中包含的唯一可行理由是將該函數中的代碼分成位。

Luceos '和Albatrosz都可能被誤讀,所以我覺得我應該澄清這些。

include指令集生成運行時 ZEND_INCLUDE_OR_EVAL操作,該操作調用Zend編譯器來編譯引用的文件。 所以通常你不應該在函數中嵌入include語句,如:

  • 每次在調用函數時獲取代碼路徑時,都會執行include。 編譯相同的代碼100次是一個壞主意。

  • 如果代碼包含全局范圍的元素(例如函數或類聲明),則執行該聲明甚至兩次將導致編譯器錯誤。

除非你知道自己在做什么,否則要這樣做。 使用Albatrosz描述的技術。 順便提一下,他的__autoload()函數只是一個例子,它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM