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

實(shí)現(xiàn)了一個(gè)PHP5的getter/setter基類(lèi)的代碼

php3、php4都擁有類(lèi),但它們的類(lèi)定義的實(shí)在很不像樣,效率還挺難為情的,但資料上說(shuō)php5重新構(gòu)造了面向?qū)ο蟮闹С郑M管并不是完全面向?qū)ο螅菜隳苣贸鰜?lái)見(jiàn)人了。
昨天晚上閑著無(wú)聊便弄起這玩意,感覺(jué)php5增加的類(lèi)成員權(quán)限關(guān)鍵字挺好,但問(wèn)題又來(lái)了,似乎還沒(méi)一種方便的方式可以定義字段的getter以及setter,傳統(tǒng)的方式是這樣定義的:

class a
{
    private $field;
    public function get_field() { return $this->$field; }
    public function set_field($value) { $this->field = $value; }
}

雖然實(shí)現(xiàn)起來(lái)挺容易,但是說(shuō)實(shí)在的,為一個(gè)字段去寫(xiě)這一堆代碼還真不爽。。
于是便思索著是不是有一種更方便的方式來(lái)解決,并且可以方便地定義它的類(lèi)型限制什么的。
搗鼓了半天(沒(méi)辦法,對(duì)它不熟。。),終于弄出一個(gè)類(lèi)來(lái)解決這個(gè)問(wèn)題:

class abstract_entity
{
    private $fields;
    private $sys_type = array(
        "bool" => "",
        "array" => "",
        "double" => "",
        "float" => "",
        "int" => "",
        "integer" => "",
        "long " => "",
        "null" => "",
        "object" => "",
        "real" => "",
        "resource" => "",
        "string" => ""
        // "mixed" and "number"
        );
    protected function __construct($fields)
    {
        /*********************************/
         * $fields = array(
         *     "id" = array(
         *        "allow_null" = false,
         *        "value" = 1,
         *        "type" = "int"
         *     );
         * );
        /**********************************/

        $this->fields = $fields;
    }
    public function __get($key)
    {
        if(array_key_exists($key, $this->fields))
        {
            return $this->fields[$key]["value"];
        }
        else
        {
            throw new Exception("該屬性不存在");
        }
    }
    public function __set($key, $value)
    {
        if(array_key_exists($key, $this->fields))
        {
            $allow_null = $this->fields[$key]["allow_null"];
            $type = $this->fields[$key]["type"];
            if(array_key_exists($type, $this->sys_type))
            {
                $fun = create_function('$value', "return is_$type($value);");
                if(@$fun($value))
                {
                    $this->fields[$key]["value"] = $value;
                }
                else if($allow_null && is_null($value))
                {
                    $this->fields[$key]["value"] = NULL;
                }
                else
                {
                    throw new Exception("該值類(lèi)型不正確,必須為" . $type . "類(lèi)型");
                }
            }
            else if($type == "mixed")
            {
                if(!is_null($value))
                {
                    $this->fields[$key]["value"] = $value;
                }
                else if($allow_null)
                {
                    $this->fields[$key]["value"] = NULL;
                }
                else
                {
                    throw new Exception("該值不允許為NULL值");
                }
            }
            else if($type == "number")
            {
                if(is_int($value) || is_float($value))
                {
                    $this->fields[$key]["value"] = $value;
                }
                else if(is_null($value) && $allow_null)
                {
                    $this->fields[$key]["value"] = NULL;
                }
                else
                {
                    throw new Exception("該值類(lèi)型不正確,必須為" . $type . "類(lèi)型");
                }
            }
            else
            {
                if(class_exists($type) || interface_exists($type))
                {
                    if(is_subclass_of($value, $type))
                    {
                        $this->fields[$key]["value"] = $value;
                    }
                    else if(is_null($value) && $allow_null)
                    {
                        $this->fields[$key]["value"] = NULL;
                    }
                    else
                    {
                        throw new Exception("該值類(lèi)型不正確,必須為" . $type . "類(lèi)型");
                    }
                }
                else if(is_null($value) && $allow_null)
                {
                    $this->fields[$key]["value"] = NULL;
                }
            }
        }
        else
        {
            throw new Exception("該屬性不存在");
        }
    }
}

通過(guò)定義一個(gè)一定格式的array可以比較方便地定義該字段的類(lèi)型、是否允許NULL值以及默認(rèn)值。

測(cè)試代碼如下:

class test extends abstract_entity
{
    public function __construct()
    {

         $define = array(
            "id" => array(
                "allow_null" => false,
                "value" => 1,
                "type" => "int"
            ),
            "name" => array(
                "allow_null" => false,
                "value" => "abc",
                "type" => "string"
            ),
            "gender" => array(
                "allow_null" => false,
                "value" => true,
                "type" => "bool"
            ),
            "ins" => array(
                "allow_null" => false,
                "value" => $this,
                "type" => "test"
                ),

            "ins1" => array(
                "allow_null" => true,
                "value" => $this,
                "type" => "test"
                ),
            "ins2" => array(
                "allow_null" => true,
                "value" => NULL,
                "type" => "config_media_type"
                )
        );

        parent::__construct($define);
    }
}
$a = new test();
$a->id = 123;
eche $a->id;
echo $a->ins1;
$a->ins1 = NULL;
echo is_null($a->ins1);

這里邊實(shí)現(xiàn)了getter以及setter,但由于時(shí)間關(guān)系我沒(méi)去實(shí)現(xiàn)readonly的功能,其實(shí)很簡(jiǎn)單,就是再加一項(xiàng),標(biāo)識(shí)它能不能被改寫(xiě)就成

php技術(shù)實(shí)現(xiàn)了一個(gè)PHP5的getter/setter基類(lèi)的代碼,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费人成视频X8X8国产更快乐 | 暖暖视频免费观看视频 | 最近中文字幕mv手机免费高清 | 99久久无码一区人妻A片蜜 | 国产露脸无码A区久久蘑菇 国产露脸无码A区久久 | 伊人伊人影院 | 国产成人免费观看在线视频 | 麻豆AV福利AV久久AV | 熟女人妻-蜜臀AV-首页 | 午夜理伦片免费 | 一区二区三区无码被窝影院 | 西西人体一级裸片 | 欧美AAAAAA级午夜福利视频 | 国产精品18久久久久久欧美 | GOGOGO高清在线播放免费 | 中文字幕 亚洲 有码 在线 | 日韩精品卡1卡2三卡四卡乱码 | 俄罗斯美女性生活 | 精品无码无人网站免费视频 | 陈红下面又紧又小好爽 | 成片在线看一区二区草莓 | 欧美大香线蕉线伊人久久 | 国产午夜三区视频在线 | 久草在线新是免费视频 | 76人遣返航班上71人呈阳性 | 91在线青春娱乐精品分类 | 成人国产精品玖玖热色欲 | 日本电影护士 | 日日天干夜夜狠狠爱 | 18禁裸乳无遮挡免费网站 | 国产精品爽爽久久久久久蜜桃网站 | 日本国产精品无码一区免费看 | 欧美日韩亚洲第一区在线 | 国产精品青青青高清在线密亚 | 极品虎白在线观看 | 狼人无码伊人AV啪啪 | 色欲久久99精品久久久久久AV | 久久国产一区二区三区 | 99精品成人无码A片观看金桔 | 亚洲黄色成人 | 日韩欧美国产免费看清风阁 |