background image

PHP 魔术方法的运用

php 有不只下面要讲到的九种魔术方法, 但是这些将会引导你使用 php 魔术方法一个好的
开始。它可能魔幻,但是并不需要魔杖。

 

这些

'魔术'方法拥有者特殊的名字,以两个下划线开始,表示这些方法在 php 特定事件下将

会被触发。这可能听起来有点自动魔法但是它真的很酷的,我们已经看过一个简单的例子在

 

last post

,即我们使用一个构造器

-使用这个作为我们第一个例子

__construct 

构造器是一个魔术方法,当对象被实例化时它会被调用。在一个类声明时它常常是第一件做
的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方
法样继承。如果我们想到以前继承例子从介绍到

oop,我们能添加构造方法到 Animal 类中,

如:

1

class

 Animal{

2

  

3

  

public

 

function

 __construct() {

4

    

$this

->created = time();

5     

$this

->logfile_handle = 

fopen

('/tmp/log.txt', 'w');

6

  }

7

  

8

}

现在我们创建一个类来继承

Animal 类 - Penguin 类!不添加任何属性和方法在 Penguin 类中,

我们能申明并定义它继承自

Animal 类,如: 

1

class

 Penguin 

extends

 Animal {

2

  

3

}

4

  

5

$tux

 = 

new

 Penguin;

6

echo

 

$tux

->created;

如果我们定义一个构造方法在

Penguin 类中,然后 Penguin 对象将会运行当它被实例化后。

由于并没有构造方法,

PHP 会参考父类方法定义 信息来使用它因此我们能覆盖父类方法,

或者不,在我们的新类中

-很便利。

__destruct

你发现文件句柄也是构造器一部分吗?当我们使用完一个对象时真不想把事情放一边,因
此析构方法做着与构造方法相反的事情。当对象被销毁时,析构方法会运行,或者明确的说
当我们不再使用它时,

php 会为我们清理掉。Animal 类中,我们的析构方法像这样,如: