PHP对象、模式与实践之高级特性分析


Posted in PHP onDecember 08, 2016

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:

高级特性

包括:

1.静态方法和属性(通过类而不是对象来访问数据和功能)
2.抽象类和接口(设计,实现分离)
3.错误处理(异常)
4.Final类和方法(限制继承)
5.拦截器(自动委托)
6.析构方法(对象销毁前的清理工作)
7.克隆对象(创建对象的副本)
8.把对象解析成字符串

PS,学会从内存的角度看代码。想象计算机的微观世界。

静态方法的小例子

<?php
class StaticExample{
  static public $aNum = 10;
  static public function sayHello(){
    print "hello";
  }
}
print StaticExample::$aNum."<br/>";
StaticExample::sayHello();

tips:

1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。
2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。

静态方法的大例子

<?php
class ShopProduct{
  private $title;
  private $producerMainName;
  private $producerFirstName;
  protected $price;
  private $discount = 0;
  private $id = 0;
  function __construct($title,$firstName,$mainName,$price){
    $this->title = $title;
    $this->producerFirstName = $firstName;
    $this->producerMainName = $mainName;
    $this->price = $price;
  }
  public function setID($id){
    $this->id = $id;
  }
  public static function getInstance($id,PDO $pdo){
    $query = "select * from products where id= '$id'";
    $stmt = $pdo->query($query);
    $row = $stmt->fetch();
    if(empty($row)){
      return null;
    }
    if($row['type'] == "book"){
      $product = new BookProduct($row['title'],
        $row['firstname'],
        $row['mainname'],
        $row['price'],
        $row['numpages']
        );
    }else if($row['type'] == "cd"){
      $product = new CdProduct($row['title'],
        $row['firstname'],
        $row['mainname'],
        $row['price'],
        $row['playLength']
        );
    }else{
      $product = new ShopProduct($row['title'],
        $row['firstname'],
        $row['mainname'],
        $row['price']
        );
    }
    $product->setId($row['id']);
    $product->setDiscount($row['discount']);
    return $product;
  }
  public function getProducerFirstName(){
    return $this->producerFirstName;
  }
  public function getProducerMainName(){
    return $this->producerMainName;
  }
  public function setDiscount($num){
    $this->discount = $num;
  }
  public function getDiscount(){
    return $this->discount;
  }
  public function getTitle(){
    return $this->title;
  }
  public function getPrice(){
    return ($this->price - $this->discount);
  }
  function getProducer(){
    return $this->producerFirstName." ".$this->producerMainName;
  }
  function getSummaryLine(){
    $base = "$this->title({$this->producerMainName},";
    $base .= "{$this->producerFirstName})";
    return $base;
  }
}
class CdProduct extends ShopProduct{
  private $playLength;
  function __construct($title,$firstName,$mainName,$price,$playLength){
    parent::__construct($title,$firstName,$mainName,$price);//继承父类的构造函数
    $this->playLength = $playLength;
  }
  function getPlayLength(){
    return $this->playLength;
  }
  function getSummaryLine(){
    $base = parent::getSummaryLine();
    $base .= ":playing time {$this->playLength}";
    return $base;
  }
}
class BookProduct extends ShopProduct{
  private $numPages = 0;
  function __construct($title,$firstName,$mainName,$price,$numPages){
    parent::__construct($title,$firstName,$mainName,$price);
    $this->numPages = $numPages;
  }
  function getnumPages(){
    return $this->numPages;
  }
  function getSummaryLine(){
    $base = parent::getSummaryLine();
    $base .= ":page count {$this->numPages}";
    return $base;
  }
}
$dsn = "sqlite:C:/Users/Administrator/Desktop/shop.db";
$pdo = new PDO($dsn,null,null);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$obj = ShopProduct::getInstance(1,$pdo);
echo $obj->getSummaryLine();

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
php + nginx项目中的权限详解
May 23 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
php中__toString()方法用法示例
Dec 07 #PHP
php中this关键字用法分析
Dec 07 #PHP
php中final关键字用法分析
Dec 07 #PHP
php中static和const关键字用法分析
Dec 07 #PHP
php抽象方法和抽象类实例分析
Dec 07 #PHP
php接口技术实例详解
Dec 07 #PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 #PHP
You might like
php用header函数实现301跳转代码实例
2013/11/25 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
单利模式及python实现方式详解
2018/03/20 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
小学清明节活动方案
2014/03/08 职场文书
保安公司服务承诺书
2014/05/28 职场文书
护理学专业求职信
2014/06/29 职场文书
镇创先争优活动总结
2014/08/28 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
父亲去世追悼词
2015/06/23 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js