在面向对象的编程中,php提供了一些魔术方法,这些魔术方法在我们编写程序中提供了很多的便利。php中通常以__(两个下划线)开头的类方法保留为魔术方法。
php 类中常用的类魔术方法代码
先看下面的示例代码,里面写了一些常用的魔术方法!class myclass{
public function __call($name, $arguments) {
// $name 为方法名
// $arguments 为传递的参数
}
public static function __callStatic($name, $arguments) {
// $name 为方法名
// $arguments 为传递的参数
}
public function __construct($name,$sex){
$this->name = $name;
$this->sex = $sex;
}
public function __desctruct(){
//销毁数据或关闭数据库等工作
}
public function __get($name) {
if(isset($this->$name)) {
return $this->$name;
}
return '属性不存在';
}
public function __set($name,$value){
$this->data[$name] = $value;
}
private function __isset($name){
return array_key_exists($name,$this->data);
}
public function __unset($name){
unset($this->data[$name]);
}
}
php常用的类魔术方法介绍
__construct()
__construct()构造函数是类中最常使用的函数。在创建对象时,可以在构造函数中做一些初始化工作。可以为构造函数定义任意多个参数,只要在实例化时传入对应个数的参数即可public function __construct($name,$sex){
$this->name = $name;
$this->sex = $sex;
}
注意:构造函数中出现的任何异常都会阻止对象的创建。
__destruct()
此函数通常在对象被销毁时触发,它没有任何的参数,一般用于清理的工作,比如关闭数据库等等!public function __desctruct(){
//销毁数据或关闭数据库等工作
}
__call()
在对象的上下文中调用一个不存在或不可访问的方法时,会触发 __call() 函数!它有两个参数,一个为被调用的方法名,一个为传递给方法的参数!public function __call($name, $arguments) {
// $name 为方法名
// $arguments 为传递的参数
}
注意:参数 $arguments 是一个枚举数组,包含着要传递给方法 $name 的参数。
__callStatic()
在对象的上下文中调用一个不存在或不可访问的方法时,会触发 __callStatic() 函数!它有两个参数,一个为被调用的方法名,一个为传递给方法的参数!public function __callStatic($name, $arguments) {
// $name 为方法名
// $arguments 为传递的参数
}
注意:参数 $arguments 是一个枚举数组,包含着要传递给方法 $name 的参数。
__get()
在尝试访问一个不存在的属性时会__get()函数会被调用。它接收一个参数,该参数表示访问属性的名字,并且将该属性的值返回public function __get($name) {
if(isset($this->$name)) {
return $this->$name;
}
return '属性不存在';
}
__set()
在尝试修改一个不可访问的属性时__set()函数会被调用,它有两个参数,一个表示属性的名字,一个表示属性的值。public function __set($name,$value){
$this->data[$name] = $value;
}
__isset()
在使用一个不可访问的属性时,isset()方法时会被触发,它只有一个表示属性的名字的参数。它应该返回一个布尔值,用来表示该属性是否存在。代private function __isset($name){
return array_key_exists($name,$this->data);
}
__unset()
在使用unset()函数销毁一个不能访问的属性时__unset()函数会被调用,它只有一个表示属性名字的参数!public function __unset($name){
unset($this->data[$name]);
}
以上就是php类中常用的魔术方法以及介绍,当然还有一些没有介绍到的,比如 __sleep(), __wakeup(), __serialize(), __unserialize(), __toString(), __invoke(), __set_state(), __clone() 以及 __debugInfo() 等,其它的自己查一下资料吧!