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

php中spl_autoload詳解

 更新時間:2014年10月17日 08:55:00   投稿:hebedich  
SPL 是Standard PHP Library(標準PHP庫)的縮寫。它是PHP5引入的一個擴展庫,其主要功能包括autoload機制的實現(xiàn)及包括各種Iterator接口或類。 SPL autoload機制的實現(xiàn)是通過將函數(shù)指針autoload_func指向自己實現(xiàn)的具有自動裝載功能的函數(shù)來實現(xiàn)的。

SPL有兩個不同的函數(shù) spl_autoload, spl_autoload_call,通過將autoload_func指向這兩個不同的函數(shù)地址來實現(xiàn)不同的自動加載機制。

spl_autoload 是SPL實現(xiàn)的默認的自動加載函數(shù),它的功能比較簡單。它可以接收兩個參數(shù),第一個參數(shù)是$class_name,表示類名,第二個參 數(shù)$file_extensions是可選的,表示類文件的擴展名" title="擴展名">擴展名,可以在$file_extensions中指定多個擴展名" title="擴展名">擴展名,護展名之間用分號隔開即 可;如果不指定的話,它將使用默認的擴展名" title="擴展名">擴展名.inc或.php。spl_autoload首先將$class_name變?yōu)樾?,然后在所有?include path中搜索$class_name.inc或$class_name.php文件(如果不指定$file_extensions參數(shù)的話),如果找 到,就加載該類文件。你可以手動使用spl_autoload(”Person”, “.class.php”)來加載Person類。實際上,它跟require/include差不多,不同的它可以指定多個擴展名" title="擴展名">擴展名。

怎 樣讓spl_autoload自動起作用呢,也就是將autoload_func指向spl_autoload?答案是使用 spl_autoload_register函數(shù)。在PHP腳本中第一次調用spl_autoload_register()時不使用任何參數(shù),就可以將 autoload_func指向spl_autoload。

通過上面的說明我們知道,spl_autoload的功能比較簡單,而且它是在SPL擴展中實現(xiàn)的,我們無法擴充它的功能。如果想實現(xiàn)自己的更靈活的自動加載機制怎么辦呢?這時,spl_autoload_call函數(shù)閃亮登場了。

我 們先看一下spl_autoload_call的實現(xiàn)有何奇妙之處。在SPL模塊內部,有一個全局變量autoload_functions,它本質上是 一個HashTable,不過我們可以將其簡單的看作一個鏈表,鏈表中的每一個元素都是一個函數(shù)指針,指向一個具有自動加載類功能的函數(shù)。 spl_autoload_call本身的實現(xiàn)很簡單,只是簡單的按順序執(zhí)行這個鏈表中每個函數(shù),在每個函數(shù)執(zhí)行完成后都判斷一次需要的類是否已經加載, 如果加載成功就直接返回,不再繼續(xù)執(zhí)行鏈表中的其它函數(shù)。如果這個鏈表中所有的函數(shù)都執(zhí)行完成后類還沒有加載,spl_autoload_call就直接 退出,并不向用戶報告錯誤。因此,使用了autoload機制,并不能保證類就一定能正確的自動加載,關鍵還是要看你的自動加載函數(shù)如何實現(xiàn)。

在php5中的標準庫方法spl_autoload相當于實現(xiàn)自己的__autoload

復制代碼 代碼如下:

<?php
    function __autoload($classname){
        if(is_file($classname.'.php'){
            include $classname.'.php';
        } elseif(is_file($classname.'.inc'){
            include $classname.'.inc';
        }
    }

它會在注冊目錄下自動尋找與$classname同名的.php/.inc文件。當然,你也可以指定特定類型的文件,方法是注冊擴展名

復制代碼 代碼如下:

<?php
    spl_autoload_extensions('.php,.inc,.some');

這樣,它也會搜索.some文件。默認,php是不會啟動spl_autoload的,那么怎樣才能自動讓spl_autoload生效呢呢?方法是

復制代碼 代碼如下:

<?php
    spl_autoload_register();

spl_autoload_register有一個$callback參數(shù),如果不指定,它就會自動注冊spl_autoload,為了能搜尋更多的自動加載目錄,可以在這些代碼前面設置自動加載目錄

復制代碼 代碼如下:

<?php
    set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);

這樣,當php找不到指定的類時,就會在set_include_path指定的目錄下尋找。

這些方法常用在php框架中。比如把上面的介紹串連起來:

復制代碼 代碼如下:

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);
spl_autoload_extensions('.php,.inc,.some');
spl_autoload_register();

當你要加載some/path下面的classA類時,它會在目錄下尋找classa.php或classa.inc或classa.some,這樣你就可以放心地運用new classA或extends classA

復制代碼 代碼如下:

<?php
    ClassB extends ClassA {
        // code..
    }

    $a = new ClassA;
    $b = new ClassB;

相關文章

  • PHP ob緩存以及ob函數(shù)原理實例解析

    PHP ob緩存以及ob函數(shù)原理實例解析

    這篇文章主要介紹了PHP ob緩存以及ob函數(shù)原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • php中cookie的作用域

    php中cookie的作用域

    注意cookie的作用域:
    2008-03-03
  • PHP如何實現(xiàn)給頁面設置獨立訪問密碼

    PHP如何實現(xiàn)給頁面設置獨立訪問密碼

    這篇文章主要為大家詳細介紹了PHP如何實現(xiàn)給頁面設置獨立訪問密碼,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-03-03
  • Zend Guard使用指南及問題處理

    Zend Guard使用指南及問題處理

    這篇文章主要介紹了Zend Guard使用指南及問題處理,需要的朋友可以參考下
    2015-01-01
  • 腳本安全的本質_PHP+MYSQL

    腳本安全的本質_PHP+MYSQL

    從代碼級別上,也就是應用層次上考慮代碼安全的話(也就是不考慮底層的語言本身等問題的漏洞),腳本安全問題就是函數(shù)和變量的問題。
    2008-10-10
  • php驗證碼生成器

    php驗證碼生成器

    這篇文章主要為大家詳細介紹了php驗證碼生成器的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • php表單轉換textarea換行符的方法

    php表單轉換textarea換行符的方法

    今天在項目中遇到一個textarea換行的問題,調試了半天都沒有解決。要將textarea里的回車換行轉換成br存入數(shù)據(jù)庫。
    2010-09-09
  • PHP生成可點擊刷新的驗證碼簡單示例

    PHP生成可點擊刷新的驗證碼簡單示例

    這篇文章主要介紹了PHP生成可點擊刷新的驗證碼,結合簡單實例形式分析了php驗證碼的實現(xiàn)與調用顯示方法,涉及js動態(tài)調用驗證碼php文件的相關技巧,需要的朋友可以參考下
    2016-05-05
  • PHP字典樹(Trie樹)定義與實現(xiàn)方法示例

    PHP字典樹(Trie樹)定義與實現(xiàn)方法示例

    這篇文章主要介紹了PHP字典樹(Trie樹)定義與實現(xiàn)方法,簡單描述了字典樹的概念并結合實例形式分析了字典樹的定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • PHP中md5()函數(shù)的用法講解

    PHP中md5()函數(shù)的用法講解

    今天小編就為大家分享一篇關于PHP中md5()函數(shù)的用法講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論

芜湖市| 牡丹江市| 襄城县| 栾川县| 长治市| 宜州市| 衢州市| 砀山县| 芒康县| 西青区| 沂源县| 昌邑市| 嘉兴市| 达州市| 东兴市| 云和县| 扎鲁特旗| 连城县| 和静县| 静乐县| 湖州市| 当涂县| 乐昌市| 博爱县| 闵行区| 桑植县| 滨海县| 西昌市| 东乡| 简阳市| 姜堰市| 河源市| 临沧市| 长兴县| 禄丰县| 榕江县| 新闻| 景泰县| 天津市| 清镇市| 三都|