簡體   English   中英

應該require_once“some file.php”;出現在文件頂部的任何地方?

[英]Should require_once “some file.php” ; appear anywhere but the top of the file?

以下示例是否適用於PHP的require_once構造?

function foo( $param )
{
    require_once "my_file.php" ;
    //
    // do something here
}

或者在文件開頭只有require_once構造更合適嗎?

即使包含的文件僅在函數的上下文中有用,為了便於閱讀和維護,是否最好包含在頂部?

它歸結為編碼風格和意見的問題。 我個人將所有的require_once語句保存在我的文件的最頂層,這樣我就可以很容易地看到哪些文件包含在哪里,沒有什么比這更糟糕的了,包括弄亂你的腳本。 但是,如果您有幾個大型必需腳本只需要某些功能,那么將require_once放在一個函數中就可以從性能角度來看,只需確保在頁面頂部放置一個注釋即可。

<?php
//require_once "my_file.php" (see function foo)

function foo($param) {
  require_once "my_file.php";
}

這是一場宗教辯論。

文件頂部的requireinclude語句的PROS:

  1. 依賴關系在一致可靠的地方清楚地記錄下來。

  2. 提高可讀性/可維護性

  3. OP代碼緩存更簡單(盡管你可以說這不會直接影響開發人員)

CONS文件頂部的requireinclude語句:

  1. 如果您正在進行某種動態運行時(包括使用__autoload()),則無法在文件頂部執行硬編碼語句。

  2. 如果代碼中只有一個執行路徑使用include,每次都包含它,則無條件地浪費資源。

  3. includerequire語句的長列表只是開發人員在編輯文件時必須滾動的噪音。 當然,一長串的依賴關系可以看作是一個標志,代碼應該分解成更小的更集中的部分,所以也許你可以將這個作為PRO旋轉,因為它使代碼味道脫穎而出。

如果您不想加載文件,除非需要,請查看自動加載 - 通過spl_autoload_register()在較新的PHP上。

也許你在某些情況下只需要包含文件,如果你根本不需要它,你可以避免包含它,如果它是一個大文件。 所以,我猜你只能在if - else語句的一個分支中找到require_once

使用require_once時請記住,這不是一些預處理器指令。 當PHP運行代碼時執行require_once語句,並且只有在執行期間尚未包含特定腳本時才執行它。

例如:

conf.php:

<?php
$maxAge = 40;
?>

myscript.php

<?php
 function foo($age) {
  require_once("conf.php");
  if($age > $maxAge) 
    return "1"; 
  else 
    return "0";
}

 echo foo(30); // Echos 1
 echo foo(30); // Echos 0
?>

在第二次調用foo(..)時不執行require_once,因為conf.php已經被包含一次。

暫無
暫無

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

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