天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP 實例化類的一點摘記


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

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;
    }
}函數只有三個參數,分別是 $class_name 、$param 以及 $instaniate ,其中 $param 是構造函數的參數,$instaniate 是可選的。請注意函數中的 $objects 數組是一個靜態變量,也就是當調用完這個函數的時候數組并不會釋放,下次調用此函數時這個數組的數據是會保存的。這樣做的好處就是可以將大部分的類實例了以后,如需要重復調用則直接返回這個類的實例就可以了,避免了重復調用,提高了性能。代碼如下:

    static $objects = array();

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

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

    $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 在函數中是一個字符串變量。關鍵字 new 可以動態的實例化指定字符串的類(如果存在的話)。有關此調用方法可以參見 php 手冊和這里。

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

php5 相對 php4 而言更加的面向對象。我想是時候更新我們我們的編碼思想了。有關 php5 的類和對象,這里有一個非常好的教程。

php技術PHP 實例化類的一點摘記,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人在线免费 | 欧美午夜精品A片一区二区HD | 国产1769一七六九视频在线 | 人人超碰97caoporen国产 | 无遮挡h肉3d动漫在线观看 | 色欲狠狠躁天天躁无码中文字幕 | 国产精品人妻无码免费A片导航 | 亚洲国产AV一区二区三区四区 | pkf女尸studiosxnxx| 亚洲高清视频网站 | 韩国女人高潮嗷嗷叫视频 | 亚洲综合小说久久另类区 | 边摸边吃奶玩乳尖视频 | 日本孕妇大胆孕交 | 女人张腿让男人桶免费 | 日韩精品一区二区三区色欲AV | 97在线精品视频 | 久久永久影院免费 | 国产AV天堂一区二区三区 | 老板揉搓秘书丰满大乳 | 欧美性动漫3d在线观看完整版 | 亚洲人成在线播放网站岛国 | 99欧美精品 | 国产激情视频在线播放 | 漂亮妈妈中文字幕版 | 亚洲免费视频在线观看 | 久久麻豆国产国产AV | 美女教师朝桐光在线播放 | 免费在线观看国产 | 一本久道视频无线视频 | 国产午夜人做人免费视频中文 | 日韩毛片在线视频 | 成年视频xxxxxx在线 | 热久久视久久精品2015 | 暖暖视频免费高清在线观看 视频 | 成人精品在线视频 | 亚洲精品线在线观看 | 在线观看国产高清免费不卡 | 狠狠色狠狠色狠狠五月ady | 欧美乱妇狂野欧美在线视频 | vr亚洲成年网址在线观看 |