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新手上路(二)
Oct 09 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
May 23 PHP
如何理解PHP核心特性命名空间
May 28 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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的宝库目录--PEAR
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript中匿名函数用法实例
2015/03/23 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
清华大学自主招生自荐信
2014/01/29 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
女生节标语
2014/06/26 职场文书
民事上诉状范文
2015/05/22 职场文书
初中家长意见
2015/06/03 职场文书
经营场所证明范本
2015/06/19 职场文书
家长会后的感想
2015/08/11 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书