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下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PHP date函数常用时间处理方法
May 11 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
ThinkPHP实现分页功能
Apr 28 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
PHP实现生成数据字典功能示例
May 24 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
CSS常用网站布局实例
2008/04/03 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
Python正则表达式和元字符详解
2018/11/29 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
Django框架模板用法入门教程
2019/11/04 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python如何实现爬取B站视频
2020/05/20 Python
django form和field具体方法和属性说明
2020/07/09 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
趣味比赛活动方案
2014/02/15 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
航空学院求职信
2014/06/11 职场文书
临床专业自荐信
2014/06/22 职场文书
如何写通讯稿
2015/07/22 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python