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 SQL防注入代码集合
Apr 25 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
第六章 php目录与文件操作
Dec 30 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
php编程每天必学之验证码
Mar 03 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
PHP与Perl之间知识点区别整理
Mar 19 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中如何调用用户自定义函数
2013/08/06 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
静态的动态续篇之来点XML
2006/12/23 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
利用JS实现数字增长
2016/07/28 Javascript
几种响应式文字详解
2017/05/19 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
使用Python实现音频双通道分离
2020/12/25 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
销售员求职个人的自我评价
2014/02/19 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
新入职员工工作总结
2015/10/15 职场文书
初三语文教学反思
2016/03/03 职场文书
导游词之西安骊山
2019/12/20 职场文书
Python爬虫基础初探selenium
2021/05/31 Python