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调用三种数据库的方法(2)
Oct 09 PHP
php下将XML转换为数组
Jan 01 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
php引用传值实例详解学习
Nov 06 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php类自动加载器实现方法
Jul 28 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 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
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php socket通信简单实现
2016/11/18 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
python判断字符串是否包含子字符串的方法
2015/03/24 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
python反转列表的三种方式解析
2019/11/08 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python如何获取文件指定行的内容
2020/05/27 Python
关于python中remove的一些坑小结
2021/01/04 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
专科应届生求职信
2013/11/24 职场文书
法人授权委托书范本
2014/04/04 职场文书
活动策划求职信模板
2014/04/21 职场文书
消防安全宣传口号
2014/06/10 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
听证通知书
2015/04/24 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python