1. <?php
  2. /**
  3. * @hypo
  4. 接口的特性:接口中定义的所有方法都必须是public
  5. 接口的实现:一个接口可以使用implements操作符,类中必须实现接口中的所有方法,否则会报fatal错误,如果要实现多个接口,可以使用逗号来分隔多个接口的名称。
  6. */
  7. header("Content-type:text/html;charset=utf-8");
  8. interface iTemplate
  9. {
  10. public function setVariable($name, $var);
  11. public function getHtml($template);
  12. }
  13. class Template implements iTemplate
  14. {
  15. private $vars = array();
  16.  
  17. public function setVariable($name, $var)
  18. {
  19. $this->vars[$name] = $var;
  20. }
  21.  
  22. public function getHtml($template)
  23. {
  24. foreach($this->vars as $name => $value) {
  25. echo "\n".$name."\n".$value."<br>";
  26. }
  27.  
  28. }
  29. }
  30. // $t=new Template();
  31. // $t->setVariable("ji","100");
  32. // $t->setVariable("ji2","200");
  33. // $t->getHtml('aa');
  34. ?>
  35. <?php
  36. //定义一接口,实现价格折扣
  37. interface zk{
  38. public function jiage();//价格
  39. public function user_s();//用户
  40. }
  41. class ordUser implements zk{//普通用户.必须实现接口所有
  42. private $zkl="0.97";
  43. function jiage(){
  44. return $this->zkl;
  45. }
  46. function user_s(){
  47. return '普通用户';
  48. }
  49. }
  50.  
  51. class vipUser implements zk{//VIP用户.必须实现接口所有
  52. private $zkl="0.91";//折扣
  53. function jiage(){
  54. return $this->zkl;
  55. }
  56. function user_s(){
  57. return 'vip用户';
  58. }
  59. }
  60.  
  61. class svipUser implements zk{//超级vip用户.必须实现接口所有
  62. private $zkl="0.88";
  63. function jiage(){
  64. return $this->zkl;
  65. }
  66. function user_s(){
  67. return 'svip用户';
  68. }
  69. }
  70. class run{//价格折扣计算
  71. var $yjg;
  72. var $us;
  73. function buy($yjg,zk $us){//zk接口名,可以去掉没影响
  74. $this->yjg=$yjg;
  75. $this->us=$us;
  76. $zjg=$this->us->jiage();
  77. $user=$this->us->user_s();
  78. echo $user.':原价格'.$yjg.',现价格'.$zjg*$yjg."<br>";
  79.  
  80. }
  81.  
  82. }
  83.  
  84. class hdPrc extends run{//继承run 显示不同用户价格
  85. function sp($hd){
  86. $this->buy(active::showActivePrc($hd),new ordUser);
  87. $this->buy(active::showActivePrc($hd),new vipUser);
  88. $this->buy(active::showActivePrc($hd),new svipUser);
  89. }
  90.  
  91. }
  92. class active{//静态活动价格添加,显示,器
  93. public static $aName;
  94. public static $aPrc;
  95. public static function addActive($aNam,$aPr){
  96. self::$aName[$aNam]=$aPr;
  97. }
  98. public static function showActivePrc($aNam){
  99. return self::$aName[$aNam];
  100. }
  101. }
  102.  
  103. active::addActive("电影活动","111");
  104. active::addActive("音乐活动","1122");
  105.  
  106. // $t=new run;
  107. // $t->buy(active::showActivePrc("音乐活动"),new ordUser);
  108. // $t->buy('111',new vipUser);
  109. // $t->buy('111',new svipUser);
  110. $b=new hdPrc;
  111. $b-> sp('音乐活动');
  112. ?>

php 类接口继承练习的更多相关文章

  1. 【C# 复习总结】类、继承和接口

    1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指 ...

  2. python的类的继承-接口继承-归一化设计

    1.先在子类本身找,如果子类没有,会去父类找 class Dad: '这个是爸爸类' money=10#Dad类的数据属性 def __init__(self,name): print("爸 ...

  3. java第四节 类的继承/抽象/接口/多态性

    /* 类的继承 类的继承可以简化类的定义 java只支持单继承,不允许多重继承 可以有多层继承,即一个类可以继承其一个类的子类,如类B继承了类A,类C又可以继承类B 那么类C也间接继承了类A 子类继承 ...

  4. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  5. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  6. Scala学习——类,继承,接口(中)

    基本类的使用:(初) package com.dtspark.scala.basics /** * trait是一个接口 * 接口的第一次继承用extends,多继承时用with * 多继承时,如果这 ...

  7. python定义接口继承类

    zxq547 python定义接口继承类invalid syntax解决办法 1 2 3 4 5 6 7 class s_all(metaclass=abc.ABCMeta):     #python ...

  8. 序列化多表操作、请求与响应、视图组件(子类与拓展类)、继承GenericAPIView类重写接口

    今日内容概要 序列化多表操作 请求与相应 视图组件 内容详细 1.序列化多表操作 模型类 models.py中 # 新建django项目 # 创建表 模型类models.py中: from djang ...

  9. python定义接口继承类invalid syntax解决办法

    class s_all(metaclass=abc.ABCMeta): #python2.7用此方法定义接口继承 # __metaclass__ = abc.ABCMeta @abc.abstract ...

随机推荐

  1. 【mongodb系统学习之十一】mongodb删除数据

    十一.mongodb删除数据: 1).删除全部文档:remove,语法db.collectionName.remove({}):小括号里边必须要有条件,否则不成功:如果只是一个空的{},则会删除集合内 ...

  2. mac下安装ELK

    本文主要为自己所走弯路而做的补充,对小白(比如我)来讲某些博客讲的还是高深了,特地来此补充说明一些东西. 主要步骤参考http://blog.csdn.net/ywheel1989/article/d ...

  3. PortableApps使用入门

    PortableApps使用入门 Software 介绍 添加软件 绿软下载站推荐 介绍 官网:http://portableapps.com/ PortableApps作为一款卓越的绿软管理软件,它 ...

  4. Python爬虫 股票数据爬取

    前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...

  5. 使用Restify+superagent做数据转发

    最近为了解决跨域问题,做了一个Node数据转发服务器,使用到了Restify和superagent. Restify 是nodejs的模块.虽然restify的API或多或少的参考了express,但 ...

  6. 【SPOJ】NUMOFPAL - Number of Palindromes(Manacher,回文树)

    [SPOJ]NUMOFPAL - Number of Palindromes(Manacher,回文树) 题面 洛谷 求一个串中包含几个回文串 题解 Manacher傻逼题 只是用回文树写写而已.. ...

  7. 【BZOJ1500】【NOI2005】维修数列(Splay)

    [BZOJ1500][NOI2005]维修数列(Splay) 题面 不想再看见这种毒瘤题,自己去BZOJ看 题解 Splay良心模板题 真的很简单 我一言不发 #include<iostream ...

  8. [luogu3412]仓鼠找sugar II

    题面在这里 题意 给定一棵树(\(n\le10^5\)),仓鼠随机选择起点和终点,之后从起点开始随机游走,每次都会等概率地选择和其相邻的任一道路,直到到达终点,求到达终点时步数的期望 sol 因为这一 ...

  9. [Luogu3425][POI2005]KOS-Dicing

    题面戳这 题目描述 Dicing is a two-player game and its outcome is fully random. Lately its popularity increas ...

  10. error:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

    问题:mysql中id存的是int(10),java代码中的id为long,转不过去 解决:mysql中的int要是需要转到java中的long,需要选择unsigned这个选项,即if(unsign ...