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 相关文章推荐
PHP 学习路线与时间表
Feb 21 PHP
PHP 登录记住密码实现思路
May 07 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
PHP实现网站访问量计数器
Oct 27 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
is_file和file_exists效率比较
Mar 14 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
session 的生命周期是多长
2006/10/09 PHP
文件系统基本操作类
2006/11/23 PHP
PHP 处理图片的类实现代码
2009/10/23 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
物业管理求职自荐信
2013/09/25 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
优秀教师推荐材料
2014/12/16 职场文书
小学老师对学生的评语
2014/12/29 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript