php之魔术方法 __set(),__get(),__isset(),__unset()
__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()这个方法,然后删除属性。
php之魔术方法 __set(),__get(),__isset(),__unset()的更多相关文章
- php __set() __get() __isset() __unset()四个方法的应用
一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其 ...
- PHP 魔术方法__set() __get() 方法
a); //output: 123 var_dump($s->b); //output: 123 var_dump($s->c); //output: null var_dump($s-& ...
- PHP 魔术方法__set() __get() 方法详解
__set() is run when writing data to inaccessible properties. __get() is utilized for reading data fr ...
- php魔术方法__SET __GET
__SET 设置一个不可访问的属性的时候 调用_set方法 __GET 获取一个不可访问的属性的时候 调用_get 方法 <?php class stu{ private $a; priva ...
- PHP面向对象魔术方法之__get 和 __set函数
l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...
- PHP的魔法方法__set() __get()
php的魔法方法__set()与__get() Tags: PHP 我们先来看看官方的文档如何定义他们的: public void __set(string $name, mixed $value); ...
- __set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别
<?php //echo strtr("I Love Mysql, Love PHP", "Mysql","MYSQL"); //$a ...
- PHP中常见魔术方法解析
<?php class info { private $province; //省 public $city; //城市 private $myname; //姓名 //__construct( ...
- PHP几种常见魔术方法与魔术变量解析
原文地址:http://small.aiweimeng.top/index.php/archives/49.html 先不多说,直接上代码,如下: class Demo { private $str ...
随机推荐
- 七、Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装
一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...
- 机器学习之shape
shape[:2] 取彩色图片的长和宽 shape[:3]取彩色图片的长和宽和通道 img.shape[0]:图像的垂直高度 img.shape[1]:图像的水平宽度 img.shape[2]:图像的 ...
- String、StringBuffer 和 StringBuilder 的区别
面试简答 区别: 1) String 长度大小不可变 2) StringBuffer 和 StringBuilder 长度可变 3) StringBuffer 线程安全 StringBuilder 线 ...
- C++语言基础——01一切的开始
环境准备 集成开发环境(Integrated Development Environment,IDE) 竞赛中最常见的是Dev-C++,平时练习采用其他IDE也可,使用方法都是类似的. 编译器 推荐使 ...
- python中列表的insert和append的效率对比
python中insert和append方法都可以向列表中插入数据只不过append默认插入列表的末尾,insert可以指定位置插入元素. 我们来测试一下他俩插入数据的效率: 测试同时对一个列表进行插 ...
- 【Oracle】userenv()函数介绍分析
说到这个userenv()使用起来还是很有用的 参数 功能 CLINET_INFO 返回最高可达64个字节存储的用户会话信 ...
- kubernets之服务的实现方式
一 服务如何通过kubernetes集群的组件来实现其功能 1.1 节点上的所有的服务相关的功能实现都是通过节点上面的kube-proxy来实现的,服务提供了一个或者多个服务IP以及端口对客户端开 ...
- Redis中哈希分布不均匀该怎么办
前言 Redis 是一个键值对数据库,其键是通过哈希进行存储的.整个 Redis 可以认为是一个外层哈希,之所以称为外层哈希,是因为 Redis 内部也提供了一种哈希类型,这个可以称之为内部哈希.当我 ...
- qt for webassembly环境搭建图文教程
一.前言 从Qt5.14开始,官方的在线安装提供了qt for webassembly构建套件,这对很多小白来说绝对是个好消息,也绝对是个好东西,好消息是不用再去交叉编译自己生成qt for weba ...
- 目标检测的评价指标(TP、TN、FP、FN、Precision、Recall、IoU、mIoU、AP、mAP)
1. TP TN FP FN GroundTruth 预测结果 TP(True Positives): 真的正样本 = [正样本 被正确分为 正样本] TN(True Negatives): 真的 ...