__set()与__get()

当一个类里面,属性被设置为私有属性时,这个属性是不能在外部被访问的。那么当我们又想在外部访问时该怎么办呢,我们可以用方法来实现。举例如下:

 1 class Test
2 {
3 private $abc;
4
5 public function setAbc($val)
6 {
7 $this->abc=$val;
8 }
9
10 public function getAbc()
11 {
12 return $this->abc;
13 }
14 }
15
16 $test=new Test();
17 $test->setAbc("this is abc!");
18 var_dump($test->getAbc());

以上这个代码就可以实现在外部访问私有属性,但是如果我们的私有属性不只一个时,假如还有一个ABD,那么我们要外部访问的话,还需要再写一个专门针对ABD的方法,这样就显得很麻烦了。如何实现多个私有属性访问,而又不用一个个去写方法呢?这时候 __set跟__get就派上用场了。上面的代码就可以这样写了,举例如下:

 1 class Test
2 {
3 private $abc;
4 private $abd;
5
6 public function __set($var, $val)
7 {
8 $this->$var=$val;
9 }
10
11 public function __get($var)
12 {
13 return $this->$var;
14 }
15 }
16
17 $test=new Test();
18 $test->abc="this is private abc";
19 echo $test->abc;

__set($var,$val):有两个参数,第一个是属性名,第二个是属性值。

__get($var):只有一个参数,属性名。

以上这段代码中,当我们给私有属性赋值时,它就会自动去执行__set()这个方法,同样的,当我们要获取属性值时,它也会自动去执__get()这个方法。访问的语法跟访问公有属性语法一样。

__isset()

__isset($var):是用来检测私有属性是否存在。只有一个参数,属性名。我们用代码来举例说明,如下:

1 class Test
2 {
3 private $abc='abc';
4 }
5 $test=new Test();
6 var_dump(isset($test->abc));

上面这段代执行的结果是返回布尔FALSE,虽然类里面有abc这个属性,但是它是私有属性,是不能被外部所访问的,所以返回布尔FALSE。如果要测试,我们可以在类里面加上__isset()方法,举例如下:

 1 class Test
2 {
3 private $abc='abc';
4
5 public function __isset($var)
6 {
7 return isset($this->$var)?true:false;
8 }
9 }
10 $test=new Test();
11 var_dump(isset($test->abc));

上面这段代码执行的结果是返回布尔TRUE,当外部的isset($test->abc) 检测不到abc时,它就会自动去执行类里面的__isset()这个方法,然后返回结果。

__unset()

__unset($var):用来删除私有属性,只有一个参数,属性名。举例如下:

 1 class Test
2 {
3 private $abc='abc';
4
5 public function __unset($var)
6 {
7 echo "__unset:".$var;
8 unset($this->$var);
9 }
10 }
11 $test=new Test();
12 unset($test->abc);

上面这段代码中,当外部的unset($test->abc)检测不到abc时,就会去执行类里面的__unset()这个方法,然后删除属性。

最新文章

  1. shell判断FTP传输是否成功
  2. 20145229&20145316 《信息安全系统设计基础》 实验二 固件设计
  3. 200、301、302、304、404等HTTP状态码
  4. java9-9 匿名内部类
  5. IOS之Core Foundation框架和Cocoa Foundation框架的区别
  6. 《深入Java虚拟机学习笔记》- 第4章 网络移动性
  7. The account '' has no team with ID ''
  8. 一个简单的redis调用类
  9. 不高级不能发帖的WPS论坛
  10. 可信执行环境TEE(转)
  11. java学习——平台的安装与部署
  12. 例子:韩顺平JavaScript----JS乌龟抓小鸡游戏
  13. python线程condition条件锁应用实例
  14. 新手-ios
  15. python框架之Django(8)-CBV中添加装饰器
  16. 学习node.js 第1篇 介绍nodejs
  17. xmlhttprequest upload
  18. 1-QT-文件操作
  19. Software Project Management 2017 Homework 1
  20. PHP 中的文本截取分析之效率

热门文章

  1. 第二章 进程同步(二)——> 重点
  2. 不想加班开发管理后台了,试试这个 Java 开源项目吧!
  3. ZooKeeper集群“脑裂”
  4. 解决phpmyadmin上传文件大小限制的配置方法
  5. Linux Clone函数
  6. 【Nginx】yum安装nginx
  7. 解决ROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat table study_record( id int(11) not null
  8. 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
  9. 关于BAPI_GOODSMVT_CREATE中货物移动相关事务代码说明
  10. 关于安装版JDK1.8 1.7更改多个JDK环境变量 不生效