2010-05-07 60 views
0

我想要一個包含所有文件的類。在一個方法中包含文件?

例如。

Loader::loadZend // loads all zend libraries 
Loader::loadSymfony // loads all symfony components 

如果我在方法中包含一個文件,這是否成爲全局可用?

它似乎不起作用。

也許我做錯了什麼,或者有沒有解決方法?

感謝

回答

3

http://uk.php.net/manual/en/function.include.php重點礦山

當包括一個文件,它包含的代碼繼承在其上包括髮生線的可變範圍。任何變量在調用文件中的該行處可用,將在被調用文件中可用,從該點開始。但是,包含文件中定義的所有功能和類別的全局範圍爲

有加載所有類的Zend,Symfony的或任何一次是一個壞主意裝載機。兩者都有自己的自動加載器,所以你需要做的就是使包含路徑的庫可用,然後使用框架自帶的自動加載器。

+0

我想你被誤解了(或者我誤解了你所複製的閱讀)我想調用一個包含文件的函數。該方法包含的文件是否可用於全局範圍內的所有代碼? – 2010-05-07 17:07:01

+0

@fayer像上面說的那樣:如果你包含一個文件,文件中的變量只能在調用函數中使用,而文件中的函數和類將是全局可用的。 – Gordon 2010-05-07 17:09:02

+0

好的,然後....那麼我想我只是使用spl_autoload_register。謝謝。 – 2010-05-07 17:11:23

1

如果你只是在另一個類中包含一個類,它只能在你插入include的類中使用。
所以解決方案是創建一個自動加載器,它自動包含demmand所需的類。這裏有您需要的信息:

http://php.net/manual/es/language.oop5.autoload.php

這是PHP5 OOP的基本編程。

編輯

查看您對文件的查詢。都不是。該文件(要通過php函數處理)只能在被調用/使用的函數內部使用,而不能在整個應用程序/網站中全局使用。

+0

是啊即時通訊使用spl_autoload,但我感興趣的知道,如果這個功能將工作'內'方法。如果我不使用autoload,只是一個普通的include,那麼這個方法包含的文件是否可用於全局範圍內的所有代碼? – 2010-05-07 17:08:52

+0

定期包含它只會影響包含它的類。戈登釘了它。 – Dez 2010-05-07 17:10:52

2

如果沒有定義全局作用域變量,則應該沒問題。否則,全局變量將會丟失。

例如,

a.php: 

<?php 
$a = "global a"; 
class c { 
    public $b = "member b"; 
} 
?> 

b.php 

<?php 
function inc() { 
include 'a.php'; 
} 

inc(); 

echo $a; 

$class = new c; 
echo $class->b; 
?> 

如果運行b.php,你會發現一個$消失和C類或任何功能仍然可用。

相關問題