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

PHP 實(shí)例化類的一點(diǎn)摘記

 更新時(shí)間:2008年03月23日 18:22:18   作者:  
最近在編寫 Grace PHP5 Framework 中,我得到很多類的實(shí)例化的心得。Grace PHP5 Framework 是一個(gè)完全基于 MVC 架構(gòu)的框架,具有良好的擴(kuò)展性。它對(duì)于類的調(diào)用可以說非常的靈活。

下面是調(diào)用一個(gè)模型(Module)的函數(shù)。這個(gè)函數(shù)的基本功能是指定一個(gè)模型(抽象化為類)的名稱,然后它會(huì)在模型目錄下面尋找這個(gè)類的腳本實(shí)例化以后返回。這樣的做法有一點(diǎn)好處就是載入和實(shí)例化是自動(dòng)的,你可以獲得最大的靈活性。下面請(qǐng)看下面的代碼,它并不長而且不復(fù)雜:

function &load_class($class_name, $param = null, $instantiate = true)
{
    static $objects = array();

    $class_name = ucfirst(strtolower($class_name));
    if (isset($objects[$class_name])) {
        return $objects[$class_name];
    }

    $class_file = DIR_MODELS . "/{$class_name}.inc.php";
    if (file_exists($class_file)) {
        require_once $class_file;

        if (!class_exists($class_name)) {
            return false;
        } else {
            $objects[$class_name] =& new $class_name($param);
            return $objects[$class_name];
        }

    }  else {
        if ($instantiate) {
            $objects[$class_name] = null;
        } 
        return null;
    }
}函數(shù)只有三個(gè)參數(shù),分別是 $class_name 、$param 以及 $instaniate ,其中 $param 是構(gòu)造函數(shù)的參數(shù),$instaniate 是可選的。請(qǐng)注意函數(shù)中的 $objects 數(shù)組是一個(gè)靜態(tài)變量,也就是當(dāng)調(diào)用完這個(gè)函數(shù)的時(shí)候數(shù)組并不會(huì)釋放,下次調(diào)用此函數(shù)時(shí)這個(gè)數(shù)組的數(shù)據(jù)是會(huì)保存的。這樣做的好處就是可以將大部分的類實(shí)例了以后,如需要重復(fù)調(diào)用則直接返回這個(gè)類的實(shí)例就可以了,避免了重復(fù)調(diào)用,提高了性能。代碼如下:

    static $objects = array();

    if (isset($objects[$class_name])) {
        return $objects[$class_name];
    }其它繼續(xù)的代碼就是檢測(cè)是否有這個(gè)類名稱的文件,如果有載入這個(gè)文件并尋找指定名稱的類,如找到了這個(gè)類以后就實(shí)例化。這要求腳本中類的名稱必須和腳本的文件名是一致的。我想這也有利于以后的代碼管理。

$instaniate 參數(shù)這個(gè)時(shí)候就發(fā)揮了功效,這個(gè)參數(shù)會(huì)告訴函數(shù)如果未找到則在 $objects 下面做一個(gè)標(biāo)記位(null)避免函數(shù)又重復(fù)的尋找文件名并重復(fù)載入和尋找。

    $class_file = DIR_MODELS . "/{$class_name}.inc.php";
    if (file_exists($class_file)) {
        require_once $class_file;

        if (!class_exists($class_name)) {
            return false;
        } else {
            $objects[$class_name] =& new $class_name($param);
            return $objects[$class_name];
        }

    }  else {
        if ($instantiate) {
            $objects[$class_name] = null;
        } 
        return null;
    }其中語句:

$objects[$class_name] =& new $class_name($param);可以多次的推敲一下。$class_name 在函數(shù)中是一個(gè)字符串變量。關(guān)鍵字 new 可以動(dòng)態(tài)的實(shí)例化指定字符串的類(如果存在的話)。有關(guān)此調(diào)用方法可以參見 PHP 手冊(cè)和這里。

此函數(shù)的不足之處就是如何去考慮傳遞不同個(gè)數(shù)的參數(shù)給每個(gè)不同的類的構(gòu)造函數(shù)。或許可以使用 call_user_func_array 等函數(shù)實(shí)現(xiàn),但是這樣的做法非常的不 Grace。在這里需要推敲一下。其實(shí) file_exists 等文件存在的測(cè)試可以交給 __autoload 函數(shù)處理,不過由于其他的函數(shù)比如 interface_exists 等也會(huì)調(diào)用 __autolaod 函數(shù),出于兼容性的考慮,所以只在函數(shù)內(nèi)做一個(gè)簡(jiǎn)單的測(cè)試。

PHP5 相對(duì) PHP4 而言更加的面向?qū)ο?。我想是時(shí)候更新我們我們的編碼思想了。有關(guān) PHP5 的類和對(duì)象,這里有一個(gè)非常好的教程。

相關(guān)文章

  • php獲取小程序碼的實(shí)現(xiàn)代碼(B類接口)

    php獲取小程序碼的實(shí)現(xiàn)代碼(B類接口)

    這篇文章主要介紹了php獲取小程序碼的實(shí)現(xiàn)代碼(B類接口),需要的朋友可以參考下
    2020-06-06
  • PHP開發(fā)中常用的十個(gè)代碼樣例

    PHP開發(fā)中常用的十個(gè)代碼樣例

    本文是小編日常收集整理的有關(guān)php開發(fā)中常用的十個(gè)代碼樣例,非常不錯(cuò),特此分享供大家參考
    2016-02-02
  • php正則表達(dá)式使用的詳細(xì)介紹

    php正則表達(dá)式使用的詳細(xì)介紹

    本篇文章介紹了,php正則表達(dá)式使用的詳細(xì)說明。需要的朋友參考下
    2013-04-04
  • 將PHP程序中返回的JSON格式數(shù)據(jù)用gzip壓縮輸出的方法

    將PHP程序中返回的JSON格式數(shù)據(jù)用gzip壓縮輸出的方法

    這篇文章主要介紹了將PHP中返回的JSON格式數(shù)據(jù)用gzip壓縮輸出的方法,文中示例環(huán)境為Linux系統(tǒng)與Apache服務(wù)器,需要的朋友可以參考下
    2016-03-03
  • yii2中使用Active Record模式的方法

    yii2中使用Active Record模式的方法

    這篇文章主要介紹了yii2中使用Active Record模式的方法,結(jié)合實(shí)例分析了Yii2中使用Active Record模式的具體步驟與相關(guān)操作方法,需要的朋友可以參考下
    2016-01-01
  • Smarty局部緩存的幾種方法簡(jiǎn)介

    Smarty局部緩存的幾種方法簡(jiǎn)介

    很多時(shí)候我們?cè)谟胹marty時(shí),并不希望緩存整個(gè)頁面,例如天氣、股票等這類即時(shí)更新的信息。那么我們可以讓其不緩存,這篇文章主要介紹了Smarty局部緩存方法,需要的朋友可以參考下
    2014-06-06
  • set_exception_handler函數(shù)在ThinkPHP中的用法

    set_exception_handler函數(shù)在ThinkPHP中的用法

    這篇文章主要介紹了set_exception_handler函數(shù)在ThinkPHP中的用法,分析了官方給出了set_exception_handler函數(shù)用法說明及示例,并講述了在ThinkPHP中的應(yīng)用實(shí)例,需要的朋友可以參考下
    2014-10-10
  • 分享自定義的幾個(gè)PHP功能函數(shù)

    分享自定義的幾個(gè)PHP功能函數(shù)

    這篇文章主要介紹了分享自定義的幾個(gè)PHP功能函數(shù),本文羅列的都是WEB開發(fā)中常用的一些功能函數(shù),例如提交過濾、字符串截取、IP地址匿名化、隱藏文件真實(shí)路徑等,需要的朋友可以參考下
    2015-04-04
  • PHP Pipeline 實(shí)現(xiàn)中間件的示例代碼

    PHP Pipeline 實(shí)現(xiàn)中間件的示例代碼

    這篇文章主要介紹了PHP Pipeline 實(shí)現(xiàn)中間件的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 使用淘寶IP庫獲取用戶ip地理位置

    使用淘寶IP庫獲取用戶ip地理位置

    以前用過GOOGLE地圖和百度地圖獲取過用戶地理位置,現(xiàn)在又多了一個(gè)方法,那就是使用淘寶IP庫獲取用戶ip地理位置,一起來看代碼吧。
    2013-10-10

最新評(píng)論

筠连县| 都江堰市| 观塘区| 曲周县| 汉阴县| 逊克县| 通海县| 墨脱县| 神木县| 涞源县| 鲜城| 霍州市| 松江区| 昆山市| 承德市| 革吉县| 隆昌县| 乐陵市| 金溪县| 嘉定区| 甘洛县| 正镶白旗| 江城| 临沂市| 柯坪县| 沈阳市| 泾川县| 蛟河市| 云梦县| 祁连县| 临西县| 自贡市| 北川| 宁波市| 华蓥市| 伊宁市| 林甸县| 东阿县| 郴州市| 醴陵市| 淮阳县|