[英]Moving to PHP5 SPL
在沒有真正與PhP合作很長一段時間后,我正在進入php 5領域。 我現在要弄清楚的一件事是如何使用spl autoload功能。 在我犯愚蠢的初學者錯誤之前,請你確認/建議:
據我了解,SPL_autoload並不意味着不再需要包括在內; 我仍然需要包含我想要手動使用的配置,如下所示:
require_once( “includess / php_ini_settings.php”);
在php_ini_settings.php中,我隨后可以運行自動加載器,將所有php文件加載到某個目錄中,例如我的classes目錄:
// Directory for classes
define('CLASS_DIR', 'classes/');
// Add classes dir to include path
set_include_path(CLASS_DIR);
spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();
這確實是將所有類自動加載到我的所有頁面中的正確(且最有效)的方法嗎?
- 添加: - 提到除非您使用不同的命名方案,否則無需指定自動加載器。 我假設命名方案默認使用類名作為文件名,在非大寫字母?
除非使用不同的命名方案,否則您實際上不需要spl_autoload_extensions()
和spl_autoload_register()
部分。 所以你基本上只需要將類路徑添加到包含路徑,就像你已經做的那樣。
我建議使用來自http://bugs.php.net/49625的 SPL_autoload_suxx()
作為你的__autoload()
函數,盡管它具有更合理的區分大小寫:
function __autoload($cn) {
$rc = false;
$exts = explode(',', spl_autoload_extensions());
$sep = (substr(PHP_OS, 0, 3) == 'Win') ? ';' : ':';
$paths = explode($sep, ini_get('include_path'));
foreach ($paths as $path) {
foreach ($exts as $ext) {
$file = $path.DIRECTORY_SEPARATOR.$cn.$ext;
if (is_readable($file)) {
require_once $file;
$rc = $file;
break;
}
}
}
return $rc;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.