五分钟带你了解PHP中的魔术技巧
发布时间:2022-07-11 13:11:18 所属栏目:PHP教程 来源:互联网
导读:在我们之前的文章中,我们介绍__clone()方法的时候提到,这是魔术方法的一种,《带你分清类中的构造函数与析构函数》中也提到的构造函数与析构函数也叫作构造方法与析构方法,他们也是魔术方法的一种。那么什么是魔术方法?它有哪些常用的方法?它又是怎样使
在我们之前的文章中,我们介绍__clone()方法的时候提到,这是魔术方法的一种,《带你分清类中的构造函数与析构函数》中也提到的构造函数与析构函数也叫作构造方法与析构方法,他们也是魔术方法的一种。那么什么是魔术方法?它有哪些常用的方法?它又是怎样使用的?接下来我们一起来看一看吧。 PHP魔术方法 在PHP面向对象编程中,PHP里有一系列的魔术方法,这些魔术方法看看之前学习的__clone__construct__destruct我们能发现一个共同点,那就是它们都是由__两个下划线开始的,并且都是在某种特定的条件下自动调用的。 那接下来我们来看一看一些常用的魔术方法,结合实例来看一下它们的使用方法。 __set()方法 __set()方法用于在为当前环境下未定义或不可见的类属性赋值时,需要注意的是所有的魔术方法,都是在某种特定条件下自动调用的,为当前环境下未定义或不可见的类属性赋值时就是__set()方法调用的特定条件。 语法格式如下: public function __set(要操作的变量, 要操作变量的值){ ... ... ; } 实例如下: <?php class father{ public $study1; private $study2; public function __set($key, $value){ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new father(); $object -> study1 = '好好学习'; $object -> study2 = '天天向上'; $object -> study3 = '福如东海'; ?> 输出结果: 1025.11.png 由上述实例看出,当当前环境下未定义或不可见的类属性赋值时,就会调用__set()方法。 __get()方法 自动调用 __get() 方法的特定条件是在调用或获取当前环境下未定义或不可见的类属性时,定义该方法的语法格式如下: public function __get($name){ ... ... ; } 其中参数$name表示要操作的变量名称,下面通过实例我们来看一下__get()方法的使用,实例如下: <?php class father{ public $study = '好好学习'; private $study1 = '天天向上'; public function __get($study1){ echo '获取:“'.$study1.'”失败!'; } } $object = new father(); echo $object -> study.'<br>'; echo $object -> study1.'<br>'; echo $object -> study2.'<br>'; ?> 输出结果: 1025.12.png 由上述结果可以看出在调用或获取当前环境下未定义或不可见的类属性时,会自动调用 __get() 方法。 __isset() 方法 自动调用 __isset() 方法的特定条件是当在类外部对类中不可访问或不存在的属性使用 isset() 或 empty() 函数时,该方法的语法格式如下: public function __isset($name){ ... ... ; } 其中我们需要注意的是: 参数 $name 为要访问的属性名称。 isset() 函数是用来检查一个变量是否存在并且还要判断不为 NULL,如果传入的变量存在则传回 true,不存在传回 false。 empty() 函数是用来检查一个变量是否为空,如果变量的值等于 FALSE,那么这个变量会被认为不存在。 如果想要使用 isset() 或 empty() 函数对类中的私有属性进行检测的话,我们只需要在类中添加一个 __isset() 方法就可以了,当在类外部使用 isset() 或 empty() 函数时,会自动调用类里面的 __isset() 方法。 接下来我们通过实例来看一下__isset()方法的使用,实例如下: <?php class father{ public $study = '好好学习'; private $name = '天天向上'; public function __isset($name){ if(property_exists('Website', $name)){ echo '成员属性:“'.$name.'”存在!<br>'; }else{ echo '成员属性:“'.$name.'”不存在!<br>'; } } } $object = new father(); isset($object -> mother); isset($object -> name); ?> 输出结果: 1025.13.png 其中我们需要注意的是,property_exists() 函数可以用来检测类中是否定义了该属性,语法格式为 property_exists($class_name,$property_name) 其中 $class_name 为字符串形式的类名,即判断类 class_name 中是否定义了 property_name 属性。 __unset() 方法 自动调用__unset() 方法的特定条件是当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,该方法的语法格式如下: public function __unset($name){ ... ... ; } 其中我们需要注意的是: 参数 $name 为要访问的属性名称。 unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。 可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可; 如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。 (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |