技術上include()
意思好像你在你的PHP點插入包含腳本的文本採取行動。因此:
includeMe.php:
<?php
$test = "Hello, World!";
?>
includeIt.php:
<?php
include('includeMe.php');
echo $test;
?>
應該是完全一樣的:
<?php
/* INSERTED FROM includeMe.php */
$test = "Hello, World!";
/* END INSERTED PORTION */
echo $test;
?>
認識到這一點,使得功能動態,包括文件的想法使大約多大意義(與大約是容易做到)因爲它們具有動態代碼。這是可能的,但它會涉及到很多元變量。
我想看看PHP中的Variable Variables以及將變量帶入全局範圍的get_defined_vars函數。這可能會喜歡的東西來完成:
<?php
define('E_ROOT', str_replace('//','/',dirname(__FILE__)));
/* ... */
function e_load($fn, $allowReloading = FALSE) {
$prev_defined_vars = get_defined_vars();
$inc = E_ROOT.'/path/here/'.$fn.'.php';
if($allowReloading)
require $inc; // !!!
else
require_once $inc; // !!!
$now_defined_vars = get_defined_vars();
$new_vars = array_diff($now_defined_vars, $prev_defined_vars);
for($i = 0; $i < count($new_vars); $i++){
// Pull new variables into the global scope
global $$newvars[$i];
}
}
?>
它可能會更方便,只需使用require()
和require_once()
代替e_load()
注意,函數和常量應該始終是在全球範圍內,所以不管他們被定義在哪裏,他們都應該可以在代碼中的任何地方被調用。
對此的一個例外是在類中定義的函數。這些只能在類的名字空間內調用。
編輯:
我只是自己測試了一下。函數在全局範圍內聲明。我跑到下面的代碼:
<?php
function test(){
function test2(){
echo "Test2 was called!";
}
}
//test2(); <-- failed
test();
test2(); // <-- succeeded this time
?>
所以test()
已經運行後的功能只是定義,但功能是再從外面test()
調用。因此,通過我之前提供的腳本,您應該需要將全局範圍拉到您的變量中。
如果它真的是*庫*,而不是模塊,那麼它包含在 – 2010-10-03 15:00:18
中的範圍並不重要,這是什麼意思? – 2010-10-03 15:03:15
我的意思是圖書館通常只代表一個包含函數/類的文件 – 2010-10-03 16:05:31