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

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

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

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

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

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

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

php 接口类:interface

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

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

我声明一个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. }
  15. }

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

  1. <?php
  2. interface myusbkou
  3. {
  4. function type();//类型
  5. function action();//执行的操作
  6. }
  7. class zip implements myusbkou
  8. { //继承接口
  9. function type()
  10. {
  11. echo "usb的2.0接口";
  12. }
  13. function action()
  14. {
  15. echo "--->需要usb 2.0驱动";
  16. }
  17. }
  18. class mp3 implements myusbkou
  19. {
  20. function type()
  21. {
  22. echo "mp3的1.0接口";
  23. }
  24. function action()
  25. {
  26. echo "--->需要mp3 1.0驱动<br/>";
  27. }
  28. }
  29. class mypc
  30. {
  31. function usbthing($thing)
  32. {
  33. $thing->type();
  34. $thing->action();
  35. }
  36. }
  37. $p=new mypc();
  38. $mp3=new mp3();
  39. $zip=new zip();
  40. $p->usbthing($mp3);
  41. $p->usbthing($zip);
  42. ?>