yangakw yangakw

php实现 set get 操作类属性

in 代码read (69) 文章转载请注明来源!

设置set get方法最笨的方法是自己手写了,不过有编辑器可以直接生成。
比如phpstorm,但是个人感觉如果一个类的属性巨多的时候写那么多set get是没有意义的,而且对于php这种脚本语言运行负载是很大的,因为需要每次去编译,链接,文件过大消耗了更多的内存。
可以使用php的魔术方法__call()处理下,不过要注意父类是否有这个方法不要重载了父类的函数就失效了。

public function __call($sName, $aArgv)
{
    $fSub = substr($sName, 0, 3);
    $func = substr($sName, 3, 6);
    ##使用方法
    #   ue_setCountry("china");
    #   ue_getCountry();
    if ($fSub == "ue_") {
        switch ($func) {
            case "set":
                $elem = substr($sName, 6);
                $elem = strtolower($elem);
                $val  = isset($aArgv[0]) ? $aArgv[0] : '';
                if(isset($this->$elem)){
                    return $this->$elem = $val;
                }else{
                    goto FATHER;
                }
            case "get":
                $elem = substr($sName, 6);
                $elem = strtolower($elem);
                if(isset($this->$elem)){
                    return $this->$elem;
                }else{
                    goto FATHER;
                }
            default:
                goto FATHER;
        }
    }
    FATHER:
    return parent::__call($sName, $aArgv);
}

当然还有更好的方法,
请输入图片描述

__get __set可以直接操作类的属性,__isset检测类中是否包含属性

public function __set($e,$v){
    $this->$e = $v;
}
public function __get($e){
    return isset($this->$e)?$this->$e:'';
}

这种方法是通过操作类的属性实现的
如果类中定义
private $name;
那么
$ p1 ->name= " 张三 " ;

jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

发表新评论
博客已运行
© 2017 yangakw
PREVIOUS NEXT
雷姆
拉姆