PHP对象、模式与实践之高级特性分析

5年以前  |  阅读数:914 次  |  编程语言:PHP 

本文实例讲述了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基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例