Notice: This article is working on progress!

本章将介绍PHP类.
现在,基本上每种语言都支持面向对象,当然PHP也不列外。
PHP在以前的版本不支持面向对象,但自从PHP4,包括PHP4之后开始支持了。本系列将以PHP5为例来描述面向对象的知识。在后面也将提及PHP4的知识。
PHP对面向对象的支持的能力,以我个人观点,没有C++,C#,Java等语言那么深入,即使如此,也算得上是比较全面的。
你问问现在的每一个人面向对象的特点是什么?他们肯定回答封装,多态,继承,没错,就是这些。


好了,我们从类开始说起吧。类的概念不说了,世人都知道。
PHP中的类可以这样写:
<?php
 
class Page
 {
     
 }
?>
它定义了一个简单的类Page,什么都没有。
你也可以定义属性和方法,如下:
<?php
 
class Page
 {
     
//2 attributes
      var $attribute1;
      
var $attribute2;
      
      
//2 functions
      function Operation1()
      {
      }
      
      
function Operation2($param1,$param2)
      {
      }
 }
?>
PHP的类有构造和析构函数吗?答案是肯定的,有!那么是不是和C++的一样呢?不是,它有专门的函数。
构造用__construct();析构用__destruct();(注意:前面是2个下划线
代码如下:
 1 <?php
 2  class Page
 3  {
 4      //2 attributes
 5       var $attribute1;
 6       var $attribute2;
 7       
 8       //2 functions
 9       function Operation1()
10       {
11       }
12       
13       function Operation2($param1,$param2)
14       {
15       }
16       
17       //construction function
18       function __construct($param)
19       {
20            $this->attribute1=$param;
21       }
22       
23       //destruction function
24       function __destruct()
25       {
26            $this->attribute1=0;
27       }
28  }
29 ?>
PHP支持重载吗?是的,PHP支持重载,这样就可以有多种方式进行构造了。
类的实例化
构建了类,我们就需要应用它,如何使用?实例化,这个和其他语言一样,所以只给出代码:
 1 <?php
 2  class Page
 3  {
 4      //2 attributes
 5       var $attribute1;
 6       var $attribute2;
 7       
 8       //2 functions
 9       function Operation1()
10       {
11       }
12       
13       function Operation2($param1,$param2)
14       {
15       }
16       
17       //construction function
18       function __construct($param)
19       {
20            $this->attribute1=$param;
21            echo "It will construct the attribute: {$this->attribute1}<br>";
22       }
23       
24       //destruction function
25       function __destruct()
26       {
27            $this->attribute1=0;
28       }
29  }
30  $instance1=new Page("attribute1 in instance 1");
31  $instance2=new Page("attribute2 in instance 2");
32  $instance1=new Page();
33 ?>
输出结果是:
1 It will construct the attribute: attribute1 in instance 1
2 It will construct the attribute: attribute2 in instance 2
3 It will construct the attribute: 

设置或得到属性
这个问题很有意思。
拿上面的例子来说, $attribute1就是一个属性,我们可以利用 $this->attribute1来获取或设置其值。
但是为了更好的体现类的封装性,还是采用PHP提供的get或set方法,这个和C#里的功能这样。但是在PHP中,提供2个方法:__get($name),__set($name,$value)函数来设置属性。
这样做的另外一个好处就是根据实际需要,加入自己的逻辑,如果直接赋值的话就不能办到。比如说属性一定要是1-100之间的数,怎么办?还是采用__set吧。看看代码吧:
?>

类成员和方法的可视性

还是public,private以及protected。和C#的作用一样。但是需要注意的是,PHP默认的是public,而不是大多数语言默认的private。基于此,上述的例子才可以使用。还需要注意的一点是,如果使用了这3个关键字,var就省略了。看个例子吧。
?>

类的继承

类的继承和C#,Java语言一样,不支持多重继承。PHP实用extends来继承一个类,和Java有些类似。
在Java里有final这个词,PHP里也有,并且作用相似,就是为了阻止继承或重载,重写方法。
提到继承,那么PHP支持接口吗?支持。例如:
 1 <?php
 2  interface IDispose
 3  {
 4      function Dispose();
 5  } 
 6  
 7  class page extends IDispose
 8  {
 9       function Dispose()
10       {
11           //Your code here.
12       }
13  }
14 ?>
PHP新的高级功能
 1. Per-class常量
    它是在PHP5引入的。这个常理不需要再初始化。例如:
?>
其实和C++里的静态变量一样。
2. 静态函数
  既然说到了静态变量,当然也要说静态函数了。它和上面的思想一样,实现时需要加static关键字,好多语言都是这样的。C#,Java等。
 代码可以如下:
?>
3. PHP 的类的类型检查
   你要想判断一个类是不是某个类的类型。非常简单,就是instanceof,如果你使用过java,那么你非常熟悉了,因为和Java一样。如果你是用C#的,类似于C# 里的is。
4. 克隆对象
   PHP提供一个关键字,clone,就是这个功能。我看PHP是我见到语言中克隆对象比较简单的语言之一。代码如下:
$c=clone $b
如果你想改变$c的某一特性,怎么办?这个时候你需要重写__clone方法。
5. 抽象类
   PHP也支持抽象类,并且和C#等语言非常类似。给个例子吧。
 
?>
输出的结果如下:
The squared size is :144
And the 
number of lines is :4
The squared size is 
:120
And the 
number of lines is :3
注意抽象函数的写法,abstract关键字。以及在子类里,没有override关键字,而是直接重写。这是和C#不同的。
6. 使用__call重载
  这是我认为PHP提供的一个非常cool的功能,非常的佩服。
这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
 举个例子吧。代码如下:
 
显示的结果如下:
Method test1 called: array(4) { [0]=>  int(1) [1]=>  string(1"2" [2]=>  float(3.4) [3]=>  bool(true) } array(3) { [0]=>  int(1) [1]=>  int(2) [2]=>  int(3) }
1 <?php
2 function __autoload($class_name) {
3     require_once $class_name . '.php';
4 }
5 
6 $obj1  = new MyClass1();
7 $obj2 = new MyClass2();
8 ?>

相关文章:

  • 2022-12-23
  • 2021-12-16
  • 2021-11-05
  • 2021-11-27
  • 2021-04-24
  • 2022-01-27
  • 2021-11-28
猜你喜欢
  • 2021-06-13
  • 2021-05-29
  • 2021-12-05
  • 2022-12-23
  • 2022-02-14
  • 2021-08-18
  • 2021-09-01
相关资源
相似解决方案