程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP autoload實現自動加載類

PHP autoload實現自動加載類

編輯:關於PHP編程

autoload機制可以使得PHP程序有可能在使用類時才自動包含類文件,而不是一開始就將所有的類文件include進來,這種機制也稱為lazy loading。

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

 代碼如下 復制代碼

/* autoload.php */   
<?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;
}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved