2010-09-30 58 views
2

在PHP中,只有在包含文件中才能看到的類?在Java中,我可以在另一個文件中看到它們,而不在當前文件中包含該文件。在PHP中,看到任何給定的類將其包含在文件中的唯一方法是?所以我只是把我的課堂文件包括在內?PHP如何看待類 - 僅在包含文件中?

+0

PHP 5中的自動加載功能是很好的解決方案。 – JustinKaz 2010-09-30 18:38:55

回答

8

在PHP中,只有在包含文件中才能看到的類?

是。但是,在PHP 5中,有新的Autoloading功能,允許您在調用類名稱時構建包含文件的函數。這實際上可以自動初始化類。

本手冊中有簡單的例子(我伸出略它)清楚這是如何工作:

<?php 
function __autoload($class_name) { 
    require_once $class_name . '.php'; 
} 

$obj = new MyClass1(); // Autoloader will load "MyClass1.php" 
$obj2 = new MyClass2(); // Autoloader will load "MyClass2.php" 
?> 

先進的自動加載磁帶機一樣Zend Framework的Zend_Loader_Autoloader(和標準PHP庫的spl_autoload_register(),歡呼@ircmaxell)使它甚至可以爲不同的前綴添加不同的自動加載規則,允許使用不同的命名約定從不同的目錄加載庫。

+0

SPL的自動加載函數['spl_autoload_register'](http://us.php.net/manual/en/function.spl-autoload-register.php)...您可以定義任意數量的自動加載函數。 PHP將繼續嘗試列表中的下一個,直到它找到該類,或者以類未找到的錯誤結束。這是你不應該在自動加載功能中出錯的原因之一(讓任何已註冊的人都有機會)。哦,沒有理由對'class_exists'進行檢查(除非是爲了防止爲已經定義的類手動調用它)... – ircmaxell 2010-09-30 19:00:00

+0

@ircmaxell好點。你當然是對的,我沒有想過。代碼固定。 – 2010-09-30 19:03:05

+1

如果您害怕手動呼叫,請將其設爲班級,並將'load'方法設爲私人。這樣你就需要在類中調用'spl_autoload_register',並且不能在外面手動調用它(因爲它是私有的,所以你只需要擔心就不會自己調用它);否則+1就可以獲得更好的信息。 .. – ircmaxell 2010-09-30 19:05:27

-1

是的只有在包含語句中才能訪問其他php文件中的函數。 PHP是標準的程序語言。它從最上面的命令開始工作,所以如果你希望執行像包含面向對象的PHP一樣的類,或者將文件包含在php頁面的頂部。

0

是 - PHP沒有任何可視化代碼並沒有在文件中直接包含使用代碼。但是,許多開發人員選擇使用PHP自動加載功能(http://php.net/manual/en/language.oop5.autoload),而不是包含(或首選方法 - 需要).php文件,因此許多開發人員都選擇使用PHP自動加載功能(http://php.net/manual/zh-cn/language.oop5.autoload) .php)在您使用特定類時自動加載所需的文件。

0

是的,要使文件中的類可用,必須包含該文件。

包括可以通過多種方式來實現一個文件,或者使用以下功能:

include(filename); 
include_once(filename) - which only includes the file if it's not already loaded 
require(filename) - equal to include, except that the script will halt if file is not available 
requier_once(filename) 

文件也可以通過__autoload或spl_autoload_register功能自動加載。更多關於PHP.net自動加載類的信息。