PHP之十六个魔术方法详细介绍
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:
范例 下面让我们以实例的形式向大家讲解下这几个魔术方法时如何使用的。 一、 __construct(),类的构造函数php中构造方法是对象创建完成后第一个被对象自动调用的方法。在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法。 1、 构造方法的作用 通常构造方法被用来执行一些有用的初始化任务,如对成员属性在创建对象时赋予初始值。 2、 构造方法的在类中的声明格式 方法体 //通常用来对成员属性进行初始化赋值} 3、 在类中声明构造方法需要注意的事项 1、在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。 2、构造方法名称是以两个下画线开始的__construct() 下面是它的例子: /**
* 显示声明一个构造方法且带参数
*/
public function __construct($name="",$sex="男",$age=22)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
/**
* say 方法
*/
public function say()
{
echo "我叫:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age;
}
} 创建对象$Person1且不带任参数 say(); //输出:我叫:,性别:男,年龄:27创建对象$Person2且带参数“小明” say(); //输出:我叫:张三,性别:男,年龄:27创建对象$Person3且带三个参数 say(); //输出:我叫:李四,性别:男,年龄:25二、__destruct(),类的析构函数通过上面的讲解,现在我们已经知道了什么叫构造方法。那么与构造方法对应的就是析构方法。 析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。 析构方法是PHP5才引进的新内容。 析造方法的声明格式与构造方法 __construct() 比较类似,也是以两个下划线开始的方法 __destruct() ,这种析构方法名称也是固定的。 1、 析构方法的声明格式 注意:析构函数不能带有任何参数。 2、 析构方法的作用 一般来说,析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁前的清理任务。 举例演示,如下: public $name;public $age; public $sex; public function __construct($name="",$age=22) /**
/**
$Person = new Person("小明"); 上面的程序运行时输出: 我觉得我还可以再抢救一下,我的名字叫小明 三、 __call(),在对象中调用一个不可访问方法时调用。该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $arguments 则以数组的方式接收不存在方法的多个参数。 1、 __call() 方法的格式: 2、 __call() 方法的作用: 为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。 该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。 请参考如下代码: echo "Hello,world!<br>";
} /**
} /**
运行结果如下: 你所调用的静态方法:run(参数:Array ( [0] => teacher ) )不存在! 你所调用的静态方法:eat(参数:Array ( [0] => 小明 [1] => 苹果 ) )不存在! Hello,world! 五、 __get(),获得一个类的成员变量时调用在 php 面向对象编程中,类的成员属性被设定为 private 后,如果我们试图在外面调用它则会出现“不能访问某个私有属性”的错误。那么为了解决这个问题,我们可以使用魔术方法 __get()。 魔术方法__get()的作用 在程序运行过程中,通过它可以在对象的外部获取私有成员属性的值。 我们通过下面的 __get() 的实例来更进一步的连接它吧: function __construct($name="",$age=1){ $this->name = $name; $this->age = $age; } /**
运行结果: 姓名:小明 年龄:50 六、 __set(),设置一个类的成员变量时调用__set() 的作用: __set( $property,$value )` 方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。 请看下面的演示代码: public function __construct($name="",$age=25){ $this->name = $name; $this->age = $age; } /**
/**
$Person=new Person("小明",25); //注意,初始值将被下面所改变 运行结果: 我叫小红,今年16岁了 七、 __isset(),当对不可访问属性调用isset()或empty()时调用在看这个方法之前我们看一下isset()函数的应用,isset()是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。 那么如果在一个对象外面使用isset()这个函数去测定对象里面的成员是否被设定可不可以用它呢? (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |