php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > php 多态与接口学习实现与实例代码

php 多态与接口学习实现与实例代码

分享到:
【字体:
导读:
          php5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等,我们无法说php5中多态的是变量. 我们只能说在php5中,多态应用在方法参数的类型提示位置. 一个...

php5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等,我们无法说php5中多态的是变量.

我们只能说在php5中,多态应用在方法参数的类型提示位置.

一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求,所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求,简单的说,一个类拥有其父类、和已实现接口的身份.

通过实现接口实现多态:下面的例子中,useradmin类的静态方法,要求一个user类型的参数.

在后面的使用中,传递了一个实现了user接口的类normaluser的实例,代码成功运行.

  1. interface user{ // user接口 
  2.  public function  getname(); 
  3.  public function setname($_name); 
  4. class normaluser implements user { // 实现接口的类. 
  5.  private $name
  6.  public function getname(){ 
  7.   return $this->name; 
  8.  } 
  9.  public function setname($_name){ 
  10.   $this->name = $_name
  11.  }//开源代码phpfensi.com 
  12. class useradmin{ //操作. 
  13.  public static function  changeusername(user $_user,$_username){ 
  14.   $_user->setname($_username); 
  15.  } 
  16. $normaluser = new normaluser(); 
  17. useradmin::changeusername($normaluser,"tom");//这里传入的是 normaluser的实例. 
  18. echo $normaluser->getname(); 
  19. ?> 

php 接口类:interface

其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如,代码如下:

  1. interface shop  
  2. {  
  3. public function buy($gid);  
  4. public function sell($gid);  
  5. public function view($gid);  

我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都不行,如果子类没有实现这些话,就无法运行,实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不行,但是具体你怎么去做,我不管,那是你的事,代码如下:

  1. class baseshop implements shop  
  2. {  
  3. public function buy($gid)  
  4. {  
  5. echo('你购买了id为 :'.$gid.'的商品');  
  6. }  
  7. public function sell($gid)  
  8. {  
  9. echo('你卖了id为 :'.$gid.'的商品');  
  10. }  
  11. public function view($gid)  
  12. {  
  13. echo('你查看了id为 :'.$gid.'的商品');  
  14. }  

下面缩一下方法,代码如下:

  1. interface myusbkou   
  2. {   
  3.     function type();//类型   
  4.     function action();//执行的操作   
  5. }   
  6. class zip implements myusbkou   
  7. {  //继承接口   
  8.     function type() 
  9.     {   
  10.         echo "usb的2.0接口";   
  11.     }   
  12.     function action() 
  13.     {   
  14.         echo "--->需要usb 2.0驱动";   
  15.     }   
  16. }   
  17. class mp3 implements myusbkou 
  18. {   
  19.     function type()   
  20.     {   
  21.      echo "mp3的1.0接口";   
  22.     }   
  23.     function action()   
  24.     {   
  25.      echo "--->需要mp3 1.0驱动
    "
    ;   
  26.     }   
  27. }   
  28. class mypc 
  29. {   
  30.     function usbthing($thing)   
  31.     {   
  32.         $thing->type();   
  33.         $thing->action();   
  34.     }   
  35. }   
  36. $p=new mypc();   
  37. $mp3=new mp3();   
  38. $zip=new zip();   
  39. $p->usbthing($mp3);   
  40. $p->usbthing($zip);   
  41. ?> 
  42.  
分享到:
PHP5 中的常量 PHP 面向对象
在PHP5中 const定义的常量与定义变量的方法不同,不需要加 $ 修饰符,const PI = 3.14; 这样就可以. 而使用const 定义的常量名称一般都大写,这是一个约定,在任何语言中都是这样. 如果定义的常量由多个单词组成,使用 _ 连接,这也是约定. 比如,MAX_MUMBER 这样的命名方式,一个良好的命名方式,是程序员必须注意的,类...
php 面向对象编程之构造方法与析构方法
大多数类都有一种称为构造函数的特殊方法,当创建一个对象时,它将自动调用构造函 数,也就是使用new 这个关键字来实例化对象的时候自动调用构造方法. 构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( ),这是PHP5 中 的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5 中仍然可以用,但 ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……