PHP autoload實現自動載入類_PHP教程

來源:互聯網
上載者:User
autoload機制可以使得PHP程式有可能在使用類時才自動包含類檔案,而不是一開始就將所有的類檔案include進來,這種機制也稱為lazy loading。

下面是使用autoload機制載入Person類的例子:

代碼如下 複製代碼

/* autoload.php */
function __autoload($classname) {
require_once ($classname . “class.php”);
}
$person = new Person(”Altair”, 6);
var_dump ($person);
?>

PHP的autoload機制的實現

要在PHP中實現自動載入類,那就要說到一個魔術方法了,__autoload();這是PHP5添加的自動載入類方法。只要定義了該函數,那麼如果PHP運行到該類找不到時,就會根據__autoload的規則去尋找。

自己也規劃一下,跟set_include_path和get_include_path來配合使用,使自動載入類更完善點,代碼飆一下(模仿magento的):

代碼如下 複製代碼

$paths[] = BP . DS . ‘app’ . DS . ‘local’;
$paths[] = BP . DS . ‘app’ . DS . ‘base’;
$paths[] = BP . DS . ‘lib’;

$appPath = implode(PS, $paths);
set_include_path($appPath . PS . get_include_path());

這樣就可以為PHP添加預設的類載入環境,這裡只是把路徑添加到了PHP環境,如果還要繼續添加規則,可以再定義__autoload函數,不過我這裡是對象使用的,就換了一種方法:spl_autoload_register方法,下面是自己根據magento的規則,自己弄了一套,其實跟magento差不多。

代碼如下 複製代碼

class Autoload {

/**
* 自身對象
*
*/
protected static $_instance = null;

public function __construct() {

}

/*
* 執行個體化自身
*
*/

public static function instance() {
if (null == self::$_instance) {
self::$_instance = new self();
}

return self::$_instance;
}

/**
*
* 註冊自動載入函數
*/
public static function register() {
spl_autoload_register(array(self::instance(), ‘autoload’));
}

/*
*
* 自動載入類
*/

public function autoload($class) {
if (!is_string($class)) {
return;
}

$classFile = str_replace(‘ ‘, DS, ucwords(str_replace(‘_’, ‘ ‘, $class)));
$classFile .= ‘.php’;
return include $classFile;
}

}

http://www.bkjia.com/PHPjc/633080.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/633080.htmlTechArticleautoload機制可以使得PHP程式有可能在使用類時才自動包含類檔案,而不是一開始就將所有的類檔案include進來,這種機制也稱為lazy loading。 下...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.