博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php get set方法深入理解
阅读量:5847 次
发布时间:2019-06-19

本文共 1686 字,大约阅读时间需要 5 分钟。

在类当中,设计通用的set和get方法,可以简化对属性的读写,这种方法不同于针对于独立的属性的普通的get和set方法,后者针对每个属性,都必须提供一对方法,前者针对所有属性,因此,可以看作是批量定义set和get方法的策略。

另外一种常见的魔术方法是construct,在这里作为对照进行介绍。

第一,关于访问权限修饰符。construct设计为public,那么可以在new创建对象时,系统会调用构造方法对对象进行初始化,否则将无法实例化此类(常用于纯静态类,或者单例模式当中),而set和get,设计为private并不影响功能本身,即系统调用这些方法是不受访问权限所左右的。而设计为public,则可以直接调用这些方法本身。

第二,关于返回值。get方法的返回值,作为属性结果,而construct和set方法的返回值是没有任何意义的,并不会被采用。如下:

echo $obj->pro = "value";

打印的值将是value,而不论set方法的返回值是什么。

第三,关于使用的情境。需要取得$obj->pro值的情况下,会首先寻找公共的pro属性,如果没有找到,会查看是否有get方法,并将其返回值作为结果,如果没有get方法,将会寻找私有属性,找到后会报错,如果私有属性也找不到,会临时创建一个公共属性。

ac = 6;//不报错,临时产生一个公共属性echo $user->ac;?>

 

在$obj->pro = "value"的情况下,会首先寻找公共pro属性,如果没有找到,会启用set方法,如get类似。

上述语法,在类本身也有用,如果类的某个方法有$obj->pro的表达式,那么,它会首先寻找属性,然后采用get方法,当然,私有属性和公共属性都会被首先寻找,然后才会考虑get方法,set方法类似。

但是isset魔术方法,是优先于get方法的,也就是说,如果客户端代码如下:

isset($obj->pro),会首先检查是否有pro公共变量,然后检查isset方法,如果有,将会读取isset方法,然后将返回值确定为检查结果,如果没有,才会考虑用get方法的过程。

第四,关于继承。这些魔术方法均会被子类继承,继承时,父类可以访问子类中的非私有变量和方法,但是无法访问私有变量和方法。这个问题会导致一个值得注意的细节,比如在父类当中,我们把set方法定义为赋值给一个叫_pro的变量,那么,如果子类直接继承这个set方法,它将能够有效赋值给父类当中定义的私有变量,但是对于子类当中的私有变量,它并没有多态的权限,因此,无法赋值。

class User{    private $id;    private $name = "jiangbo";    public function __get($property_name)    {        if(isset($this->$property_name))        {            if($property_name == "cd"){                return $this->_cdtime;            }            return($this->$property_name);        }        else        {            return("no find");        }    }    //__set()方法用来设置私有属性    public function __set($property_name, $value)    {        $this->$property_name = $value;    }}$user = new User();echo $user->ac;//"no find"echo "
";echo $user->name;

 

转载于:https://www.cnblogs.com/as3lib/p/5513875.html

你可能感兴趣的文章
高性能WEB开发之flush让页面分块逐步呈现
查看>>
xp重做系统时蓝屏解决方法
查看>>
Maven常用的命令
查看>>
高级排版之HTML,CSS解析
查看>>
最佳的解决方案关于:cactiez监控linux主机时iptables阻碍了udp161端口造成无法监控解...
查看>>
IOS Core Animation Advanced Techniques的学习笔记(三)
查看>>
生产环境中mysql主从同步/完整/增量备份
查看>>
本博客中关于功能点分析FPA的文章索引
查看>>
linux下怎样查看硬盘型号和硬盘序列号
查看>>
神州数码 路由器CHAP认证
查看>>
SharePoint2013 中集成AD RMS 与Office Web App 2013集成
查看>>
Windows与Linux下重置MYSQL的Root密码方法
查看>>
redis的主从集群环境搭建
查看>>
好程序员web前端带你了解JS的作用域链
查看>>
除了模拟手术教学,VR在医疗领域如何应用?
查看>>
JVM性能调优之如何书写高效优雅的代码
查看>>
谈数据中心“容灾和备份的区别”
查看>>
linux的LVM
查看>>
不同的类UNIX操作系统密码破解方法介绍
查看>>
hive报错(2)udf无法找到第三方的类
查看>>