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。 下...