热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP面向对象概念与实例

一个简单的关于PHP面向对象概念与实例文章,有需要的朋友可以简单的参考一下。关键字和特殊变量,new,class,extends。这三个,大家都懂得

一个简单的关于PHP面向对象概念与实例文章,有需要的朋友可以简单的参考一下.

关键字和特殊变量

new,class,extends.这三个,大家都懂得. 

::,范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量.还可以用于覆盖类中的成员和方法.  

parent和self.parent指的就是派生类在 extends 声明中所指的基类的名字.这样做可以避免在多个地方使用基类的名字. 

$this 伪变量.$this指向当前的实例.$this却不一定是方法所属的对象.有时候类A内的代码会调用类B的一个静态方法.参考例子:http://www.php.net/manual/zh/language.oop5.basic.php 

static关键字.如果声明类成员或方法为static,就可以不实例化类而直接访问.但是,除了静态方法,不能通过一个对象来访问其中的静态成员.在静态方法中,不使用$this.而使用self:: . 

final关键字.可以作用于类(class)和方法(function),会使类不能被继承,方法不能被覆盖. 

属性

可以初始化,但初始化的值必须是常数.常量前面用const个关键字,常量的值必须是一个定值,不能是变量,类属性或其它操作(如函数调用)的结果.

构造函数和析构函数

这两个函数都不会暗中调用基类的响应函数,这跟java的构造器机制不一样.要达到这样的效果,必须显示执行.析构函数中不能抛出异常.

抽象类:声明为抽象的类方法不能包含具体实现,抽象类不能实例化.必须先被继承,再实例化其子类.而且子类的访问控制要和抽象类一样,或者更加宽松.抽象类至少包含一个抽象方法的.

接口

使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容.   

定义的所有方法都必须是public,且方法为空 

可以定义常量,但是没有属性 

接口的实现(implements)必须实现所有方法,而且可以实现多个接口(注意,方法不能重名). 

接口可以被另外的接口继承 (extends)

实例代码如下:

  1. /* 
  2. * 定义了 User接口. 
  3. * 和子类 NormalUser,VipUser,InnerUser  
  4. */ 
  5. //User接口,定义了三个抽象方法. 
  6. interface User{ 
  7.  public function getName(); 
  8.  public function setName($_name); 
  9.  public function getDiscount(); 
  10. abstract class AbstractUser implements User{ 
  11.  private $name = ""//名字 
  12.  protected  $discount = 0; //折扣 
  13.  protected  $grade = "";  //级别 
  14.  
  15.  public function __construct($_name){ 
  16.   $this->setName($_name); 
  17.  } 
  18.  public function getName(){ 
  19.   return $this->name; 
  20.  } 
  21.  public function setName($_name){ 
  22.   $this->name = $_name
  23.  } 
  24.  public function getDiscount(){ 
  25.   return $this->discount; 
  26.  } 
  27.  
  28.  public function getGrade(){ 
  29.   return $this->grade; 
  30.  } 
  31. class NormalUser extends AbstractUser  {  
  32.  protected  $discount = 1.0; 
  33.  protected  $grade = "NormalUser"
  34. class VipUser extends AbstractUser { 
  35.  protected  $discount = 0.8; 
  36.  protected  $grade = "VipUser"
  37. class InnerUser extends AbstractUser { 
  38.  protected  $discount = 0.7; 
  39.  protected  $grade = "InnerUser"
  40. ?> 

Product.php

实例代码如下:

  1. include_once("User.php"); 
  2. include_once("Product.php"); 
  3. //买了产品到底多少钱呢? 
  4. class ProductSettle{ 
  5.  public static function  finalPrice(User $_user,Product $_product,$number = 1){ 
  6.   $price = $_user->getDiscount() * $_product->getProductPrice() * $number
  7.   return $price
  8.  } 
  9. ?> 

下面的例子是实现.大家可以自己分析下.

实例代码如下:

  1. include_once("./class/User.php"); 
  2. include_once("./class/Product.php"); 
  3. include_once("./class/ProductSettle.php"); 
  4. $number = 10; 
  5. $book = new BookOnline("设计模式"); 
  6.  
  7. $user = new NormalUser("Tom"); 
  8. $price = ProductSettle::finalPrice($user,$book,$number); 
  9. $str =  "您好,尊敬的用户 " . $user->getName() . 
    "
  10. $str .= "您的级别是 "$user->getGrade() .", 
    "
  11. $str .= "您的折扣是 " . $user->getDiscount() . "
    "
  12. $str .= "购买 $number 本 《 "$book->getProductName() ; 
  13. $str .=  "》的价格是 $price 

    "
  14. echo $str
  15.  
  16. $user = new vipUser("Tom"); 
  17. $price = ProductSettle::finalPrice($user,$book,$number); 
  18. $str =  "您好,尊敬的用户 " . $user->getName() . 
    "
  19. $str .= "您的级别是 "$user->getGrade() .", 
    "
  20. $str .= "您的折扣是 " . $user->getDiscount() . "
    "
  21. $str .= "购买 $number 本 《 "$book->getProductName() ; 
  22. $str .=  "》的价格是 $price 

    "
  23. echo $str
  24. $user = new InnerUser("Tom"); 
  25. $price = ProductSettle::finalPrice($user,$book,$number); 
  26. $str =  "您好,尊敬的用户 " . $user->getName() . 
    "
  27. $str .= "您的级别是 "$user->getGrade() .", 
    "
  28. $str .= "您的折扣是 " . $user->getDiscount() . "
    "
  29. $str .= "购买 $number 本 《 "$book->getProductName() ; 
  30. $str .=  "》的价格是 $price 

    "
  31. echo $str
  32. ?> 

推荐阅读
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 如何在AE中创建裂变式加载动画
    本文将详细介绍如何使用Adobe After Effects (AE) 制作一个裂变式加载动画。通过简单的步骤,您可以轻松创建出引人注目的转圈式加载效果。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 实现自定义组件的多值v-model双向绑定
    探讨如何在自定义组件中实现多个输入框与父组件数据的动态双向绑定,确保组件内部多个值的变化能实时反映到父组件的数据中。 ... [详细]
  • 本文深入解析宋代诗人苏轼的《催试官考较戏作》,探讨其诗中的意境、意象及艺术特色,同时提供详细的译文,帮助读者更好地理解这首经典之作。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 精致小屏灰色风格苹果CMS v10模板,支持DIY主题管理系统
    探索一款专为影视站设计的苹果CMS v10模板,具备强大的主题管理系统和500多个设置项,无需二次开发即可轻松配置。下载地址:https://www.mytheme.cn/maccms/244.html,演示地址:http://demo.mytheme.cn/index.php?id=244。 ... [详细]
author-avatar
wocaonima傻乎乎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有