php类的魔术方法

在php 5中,提供了构造函数,析构函数,对象克隆的方法,重载方法等.

1、构造函数__construct

如果在类申明中__construct函数,将被当成一个构造函数并且在对象建立时被执行,但在php4中,构造函数的名称与类名相同就是构造函数哦,这一点有一些不同。

2、析构函数__destruct

如果在php类中申明了,在对象被销毁时调用__destruct函数

下面来看个实例,代码如下:

  1. <?php
  2. class Session
  3. {
  4. public function __construct()
  5. {
  6. echo '构造函数执行';
  7. }
  8. public function __destruct()
  9. {
  10. echo '析构函数执行';
  11. }
  12. }//开源代码phpfensi.com
  13. $Obj = new Session;
  14. unset($Obj);//删除对象, __destruct()会被调用的
  15. //输出
  16. //构造函数执行
  17. /析构函数执行
  18. ?>

上面在使用new创建对象时就执行了__construct,对象结束时就执行了__destruct()

3、__clone()克隆函数,代码如下:

  1. <?php
  2. class Session
  3. {
  4. public $age = 20;
  5. public $sub = null;
  6. public function __clone()
  7. {
  8. $this->sub=clone $this->sub;
  9. }
  10. }
  11. class Session 2
  12. {
  13. public $value=5;
  14. }
  15. $s = new Session;
  16. $s->sub=new Session 2;
  17. $s2 = clone $s;
  18. $s->sub->$value =10;
  19. echo $s2->sub->$value;
  20. ?>

4 现在来看关于重载函数__get ,__set,__call函数,代码如下:

  1. <?php
  2. class Session
  3. {
  4. protected function __call($func,$para)
  5. {
  6. echo '方法不存在:’func." ".'参数为:'." ";
  7. print_r($para);
  8. }
  9. }
  10. $s=new Session ();
  11. echo $c->getNames('hello','you');
  12. /*
  13. 输出:
  14. 方法不存在:getNames
  15. 参数为:
  16. Array
  17. (
  18. [0] => hello
  19. [1] => you
  20. )
  21. */
  22. ?>