最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php自動加載方式集合

 更新時間:2016年04月04日 18:46:43   作者:飛鴻影~  
這篇文章主要針對php自動加載方式進行大集合,一種是常規(guī)加載方式,另一種是__autoload()自動加載,想知道第三種方式請閱讀下文

php加載文件方式:
1、include,include_once,requice,requice_one常規(guī)加載
2、__autoload()
3、spl_autoload_register()

常規(guī)加載方式
假設我們有一個類文件A.php,里面定義了一個名字為A的類:

<?php  
class A {  
  public function __construct() {  
    echo 'Got it.';  
  }  
}

然后我們有一個index.php需要用到這個類A,常規(guī)的寫法就是

<?php  
  require('A.php');  
  $a = new A();

但是有一個問題就是,假如我們的index.php需要包含的不只是類A,而是需要很多類,這樣子就必須寫很多行require語句,有時候也會讓人覺得不爽。

__autoload()自動加載
不過在php5之后的版本,我們就不再需要這樣做了。
在php5中,試圖使用尚未定義的類時會自動調(diào)用__autoload函數(shù),所以我們可以通過編寫__autoload函數(shù)來讓php自動加載類,而不必寫一個長長的包含文件列表。

例如在上面那個例子中,index.php可以這樣寫:

<?php  
function __autoload($class){  
  $file = $class . '.php';  
  if (is_file($file)) {  
    require_once($file);  
  }  
}  
$a = new A();

當然上面只是最簡單的示范,__autoload只是去include_path尋找類文件并加載,我們可以根據(jù)自己的需要定義__autoload加載類的規(guī)則。注意:由于__autoload()是個函數(shù),只能存在一次。

spl_autoload_register()自動加載
但現(xiàn)在問題來了,如果在一個系統(tǒng)的實現(xiàn)中,如果需要使用很多其它的類庫,這些類庫可能是由不同的開發(fā)人員編寫的,其類名與實際的磁盤文件的映射規(guī)則不盡相同。這時如果要實現(xiàn)類庫文件的自動加載,就必須在__autoload()函數(shù)中將所有的映射規(guī)則全部實現(xiàn),這樣的話__autoload()函數(shù)有可能 會非常復雜,甚至無法實現(xiàn)。最后可能會導致__autoload()函數(shù)十分臃腫,這時即便能夠?qū)崿F(xiàn),也會給將來的維護和系統(tǒng)效率帶來很大的負面影響。在這種情況下,難道就沒有更簡單清晰的解決辦法了吧?答案當然是:NO!

spl_autoload_register() 滿足了此類需求。 它實際上創(chuàng)建了 autoload 函數(shù)的隊列,按定義時的順序逐個執(zhí)行。相比之下, __autoload() 只可以定義一次。

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
我們繼續(xù)改寫上面那個例子:

<?php  
function loader($class){  
  $file = $class . '.php';  
  if (is_file($file)) {  
    require_once($file);  
  }  
}  
spl_autoload_register('loader');  
$a = new A();

或者直接使用匿名函數(shù):

<?php  
 
spl_autoload_register(function($file){
  $file = $class . '.php';  
  if (is_file($file)) {  
    require_once($file);  
  }
});  
$a = new A();

這樣子也是可以正常運行的,這時候php在尋找類的時候就沒有調(diào)用__autoload而是調(diào)用我們自己定義的函數(shù)loader了。同樣的道理,下面這種寫法也是可以的:

<?php  
class Loader {  
  public static function loadClass($class){  
    $file = $class . '.php';  
    if (is_file($file)) {  
      require_once($file);  
    }  
  }  
}  
spl_autoload_register(array('Loader', 'loadClass')); 
//spl_autoload_register(array(__CLASS__, 'loadClass')); 
//spl_autoload_register(array($this, 'loadClass')); 
$a = new A();

更多示例
autoload.php

<?php

define('SDK_PATH', __DIR__);

require_once SDK_PATH . '/common/functions.php';
require_once SDK_PATH . '/common/config.php';

spl_autoload_register(function ($class) {
  if (false !== stripos($class, 'YJC\Wechat')) {
    require_once __DIR__ . '/' . str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 10)) . '.php';
  }
});


/*
function __autoload($class){
  if (false !== stripos($class, 'YJC\Wechat')) {
    require_once __DIR__ . '/' . str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 10)) . '.php';
  }
}
*/

建議入口文件里養(yǎng)成定義絕對地址SDK_PATH的習慣,這樣require不會出錯。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關(guān)文章

  • php5編程中的異常處理詳細方法介紹

    php5編程中的異常處理詳細方法介紹

    比較詳細的關(guān)于php5的異常處理方法,而且給出了,多種方法
    2008-07-07
  • PHP對象遞歸引用造成內(nèi)存泄漏分析

    PHP對象遞歸引用造成內(nèi)存泄漏分析

    這篇文章主要介紹了PHP對象遞歸引用造成內(nèi)存泄漏分析,是PHP程序設計中需要加以重視的一個bug,并且有助于深入理解PHP運行原理,需要的朋友可以參考下
    2014-08-08
  • 解決GD中文亂碼問題

    解決GD中文亂碼問題

    解決GD中文亂碼問題...
    2007-02-02
  • phpMyadmin 用戶權(quán)限中英對照

    phpMyadmin 用戶權(quán)限中英對照

    在登陸phpmyadmin時選擇了“中文 – Chinese Simplified“,那么就有中文的管理界面了,雖然在phpmyadmin中顯示的用戶權(quán)限顯示的還是英文的,但是鼠標放上去時,有中文的提示,這里把phpmyadmin v3.2.4中英文對照表附上
    2010-04-04
  • PHP小技巧之函數(shù)重載

    PHP小技巧之函數(shù)重載

    php 作為一種弱類型語言,本身不能像強類型如java ,c++那樣,直接的實現(xiàn)重載。不過可以通過一些方法,間接的實現(xiàn)重載。
    2014-06-06
  • PHP數(shù)組遞歸排序?qū)崿F(xiàn)方法示例

    PHP數(shù)組遞歸排序?qū)崿F(xiàn)方法示例

    這篇文章主要介紹了PHP數(shù)組遞歸排序?qū)崿F(xiàn)方法,結(jié)合實例形式分析了php基于遞歸算法針對特定key對數(shù)組進行排序的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • php實現(xiàn)批量刪除掛馬文件及批量替換頁面內(nèi)容完整實例

    php實現(xiàn)批量刪除掛馬文件及批量替換頁面內(nèi)容完整實例

    這篇文章主要介紹了php實現(xiàn)批量刪除掛馬文件及批量替換頁面內(nèi)容的方法,涉及php文件與目錄的遍歷、查找以及字符串與數(shù)組的遍歷與替換操作相關(guān)技巧,適用于utf-8編碼環(huán)境,需要的朋友可以參考下
    2016-07-07
  • PHP使用OB緩存實現(xiàn)靜態(tài)化功能示例

    PHP使用OB緩存實現(xiàn)靜態(tài)化功能示例

    這篇文章主要介紹了PHP使用OB緩存實現(xiàn)靜態(tài)化功能,結(jié)合具體實例形式分析了php基于OB緩存讀取數(shù)據(jù)庫并生成靜態(tài)文件相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • php中防止惡意刷新頁面的代碼小結(jié)

    php中防止惡意刷新頁面的代碼小結(jié)

    惡意刷新就是不停的去刷新提交頁面,導致大量無效數(shù)據(jù)了,下面我們來總結(jié)一下php 防止惡意刷新頁面方法總結(jié)
    2012-10-10
  • php調(diào)用C代碼的實現(xiàn)方法

    php調(diào)用C代碼的實現(xiàn)方法

    本篇文章主要是對php調(diào)用C代碼的實現(xiàn)方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03

最新評論

东乌珠穆沁旗| 临颍县| 康平县| 华坪县| 积石山| 黑龙江省| 伊吾县| 定兴县| 建湖县| 邛崃市| 钟山县| 灵武市| 霍州市| 万荣县| 外汇| 抚松县| 临海市| 丰县| 齐齐哈尔市| 衢州市| 嫩江县| 河源市| 上栗县| 克山县| 金沙县| 龙州县| 阜阳市| 宾阳县| 乌拉特前旗| 称多县| 明光市| 拜城县| 安徽省| 石河子市| 西充县| 阜新市| 攀枝花市| 上犹县| 确山县| 砚山县| 石屏县|