簡體   English   中英

轉到PHP5 SPL

[英]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.

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