多态是面向对三个重要特性之一,但是有时跟一些php开发的朋友聊天,发现很多php程序员对多态都存在误解,有不少人以为多态就是根据传入参数的类型和个数不同,执行不同的函数,而其实,这个观点是错误的。

 
那么我们先引用百度百科对多态的描述吧。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
 
从这个定义中,我们可以理解,多态其实引入的是整个类,如果用工厂来比喻,多态引入的是整条生产线,实现的是工厂模式的工作模式。而根据传入参数的类型和个数不同,执行不同的函数,这种工作模式其实可以说是映射,而不是多态,它实现的是根据传入的参数类型和个数不同,映射到对应的不同函数中执行不同的代码,这也不是工厂模式。
 
好吧,说了这么多理论,给一个案例给大家,一下子就知道什么是多态了。
 
   
   
   
   
  1.  
  2. /** 
  3. * 数据库基类 
  4. */ 
  5. interface SqlDri { 
  6.    public function connect(); 
  7.  
  8. /** 
  9. * mysql子类 
  10. */ 
  11. class MysqlObj implements SqlDri {  
  12.    public function connect() { 
  13.         print "mysql connect success!"
  14.    } 
  15.  
  16. /** 
  17. * mssql子类 
  18. */ 
  19. class MssqlObj implements SqlDri { 
  20.    public function connect() { 
  21.         print "mssql connect success!"
  22.    } 
  23.  
  24. /** 
  25. * 多态入口 
  26. */ 
  27. class SqlEnt { 
  28.    public function connect(SqlDri $SqlDri) { 
  29.         $SqlDri->connect(); 
  30.    } 
  31.  
  32.  
  33. $SqlEnt = new SqlEnt(); 
  34. $SqlEnt->connect(new MysqlObj()); 
  35. //$SqlEnt->connect(new MssqlObj()); 
  36.  
  37. ?>