博主信息
博文 62
粉丝 7
评论 2
访问量 74134
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
面向接口和特殊类trait编程的学习
我是郭富城
原创
874人浏览过

面向接口编程

1.结合自己的理解, 写一个接口的案例

  • 接口定义了实现某种服务的一般规范,声明了所需的函数(接口方法)和常量,但不指定如何实现。之所以不给出实现的细节,是因为不同的实体可能需要用不同的方式来实现公共的方法定义。关键是要建立必须实现的一组一般原则,只有满足了这些原则才能说实现了这个接口。

    就如同老师给同学们出了一道开放题,这个题目是抽象的,解答的方法有很多

  1. <?php
  2. interface Fruit
  3. {
  4. const MAX_WEIGHT = 5; //静态常量(接口的常量)
  5. function setName($name);
  6. function getName();
  7. }
  8. //实现接口
  9. class Apple implements Fruit
  10. {
  11. private $name;
  12. function getName()
  13. {
  14. return $this->name;
  15. }
  16. function setName($_name)
  17. {
  18. $this->name = $_name;
  19. }
  20. }
  21. $apple = new Apple(); //创建对象
  22. $apple->setName("苹果");
  23. echo "创建了一个" . $apple->getName();
  24. echo "<br />";
  25. echo "MAX_GRADE is " . Apple::MAX_WEIGHT; //静态常量

2.接口的继承

  • 接口含有常量,接口方法
  • 接口默认都是抽象方法,不能直接实例化
  • 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法。

    接口是一堆方法的说明,不能加属性(成员变量)
    接口就是供组装成类用的,方法只能用 public;

  1. <?php
  2. interface iNicola
  3. {
  4. //接口常量
  5. const NATION = '中国广东梅州';
  6. }
  7. interface iNicola1 extends iNicola
  8. {
  9. //接口常量
  10. const USER_NAME = '尼古拉';
  11. }
  12. //接口允许多继承
  13. interface iNicola2 extends iNicola, iNicola1
  14. {
  15. //接口方法
  16. public function write();
  17. }
  18. //实现类
  19. class Nicola implements iNicola, iNicola1, iNicola2
  20. {
  21. //必须实现接口中的抽象方法
  22. public function write()
  23. {
  24. return iNicola1::USER_NAME . '家乡是:' . iNicola::NATION;
  25. }
  26. }
  27. echo (new Nicola)->write();

3. trait 的基本功能,代码复用

  • 与抽象类和接口一样,不能被实例化,只能嵌入到宿主类使用
  • trait 是一个特殊类:1.常规属性,2.静态,3.抽象,不能有类常量
  • 代码复用

    在继承上下文环境中,具有优先级,通过优先级别的设置,降低单继承的影响
    子类 > trait > 父类

  1. <?php
  2. // trait php5.4+ 代码复用
  3. // 与抽象类和接口一样,不能被实例化,只能嵌入到宿主类使用
  4. // trait是一个特殊类:1.常规属性,2.静态,3.抽象,不能有类常量
  5. trait tDemo
  6. {
  7. //常规
  8. public $nicola = '尼古拉';
  9. public function get()
  10. {
  11. return $this->nicola;
  12. }
  13. //静态
  14. public static $nico = '搬运工/Boss';
  15. public static function set()
  16. {
  17. return '职业是:' . self::$nico;
  18. }
  19. //抽象
  20. public static $age;
  21. //抽象方法
  22. abstract public static function set1();
  23. }
  24. // 客户端
  25. class Nicola
  26. {
  27. use tDemo;
  28. public static function set1()
  29. {
  30. return self::$age;
  31. }
  32. }
  33. $nicola = new Nicola;
  34. Nicola::$age = '18';
  35. echo Nicola::set1();
  • 案例演示
  1. <?php
  2. trait Dog{
  3. public $name="小狗";
  4. public function bark(){
  5. echo "这是一只旺财";
  6. }
  7. }
  8. class Animal{
  9. public function eat(){
  10. echo "旺财正在吃东西";
  11. }
  12. }
  13. class Cat extends Animal{
  14. use Dog;
  15. public function drive(){
  16. echo "旺财在开车";
  17. }
  18. }
  19. $cat = new Cat();
  20. $cat->drive();
  21. echo "<br/>";
  22. $cat->eat();
  23. echo "<br/>";
  24. $cat->bark();

4. 总结

关于 trait 的理解,php 从以前到现在一直都是单继承的语言,无法同时从两个基类/父类中继承属性和方法,为了解决这个问题,php 出了 Trait 这个特性。通过在类中使用 use 关键字,声明要组合的 Trait 名称,具体的 Trait 的声明使用 Trait 关键词,Trait 不能实例化。

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:接口, 像是宪法, 是其它法律的参考与依据
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学