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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
Destoon模板制作简明教程
Jun 20 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
php强制更新图片缓存的方法
Feb 11 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
thinkPHP批量删除的实现方法分析
Nov 09 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 PHP
浅谈laravel aliases别名的原理
Oct 24 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php HTML无刷新提交表单
2016/04/05 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
详解vue-cli3使用
2018/08/14 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
javascript实现商品图片放大镜
2019/11/28 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python妹子图简单爬虫实例
2015/07/07 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python中join()方法介绍
2018/10/11 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python 爬取疫情数据的源码
2020/02/09 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
收银出纳员岗位职责
2014/02/23 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
个人剖析材料范文
2014/09/30 职场文书
八一建军节主持词
2015/07/01 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
nginx lua 操作 mysql
2022/05/15 Servers