PHP对象、模式与实践之高级特性分析
本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:
高级特性
包括:
1.静态方法和属性(通过类而不是对象来访问数据和功能)
2.抽象类和接口(设计,实现分离)
3.错误处理(异常)
4.Final类和方法(限制继承)
5.拦截器(自动委托)
6.析构方法(对象销毁前的清理工作)
7.克隆对象(创建对象的副本)
8.把对象解析成字符串
PS,学会从内存的角度看代码。想象计算机的微观世界。
静态方法的小例子
<?php classStaticExample{ staticpublic$aNum=10; staticpublicfunctionsayHello(){ print"hello"; } } printStaticExample::$aNum."<br/>"; StaticExample::sayHello();
tips:
1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。
2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。
静态方法的大例子
<?php classShopProduct{ 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; } publicfunctionsetID($id){ $this->id=$id; } publicstaticfunctiongetInstance($id,PDO$pdo){ $query="select*fromproductswhereid='$id'"; $stmt=$pdo->query($query); $row=$stmt->fetch(); if(empty($row)){ returnnull; } if($row['type']=="book"){ $product=newBookProduct($row['title'], $row['firstname'], $row['mainname'], $row['price'], $row['numpages'] ); }elseif($row['type']=="cd"){ $product=newCdProduct($row['title'], $row['firstname'], $row['mainname'], $row['price'], $row['playLength'] ); }else{ $product=newShopProduct($row['title'], $row['firstname'], $row['mainname'], $row['price'] ); } $product->setId($row['id']); $product->setDiscount($row['discount']); return$product; } publicfunctiongetProducerFirstName(){ return$this->producerFirstName; } publicfunctiongetProducerMainName(){ return$this->producerMainName; } publicfunctionsetDiscount($num){ $this->discount=$num; } publicfunctiongetDiscount(){ return$this->discount; } publicfunctiongetTitle(){ return$this->title; } publicfunctiongetPrice(){ return($this->price-$this->discount); } functiongetProducer(){ return$this->producerFirstName."".$this->producerMainName; } functiongetSummaryLine(){ $base="$this->title({$this->producerMainName},"; $base.="{$this->producerFirstName})"; return$base; } } classCdProductextendsShopProduct{ private$playLength; function__construct($title,$firstName,$mainName,$price,$playLength){ parent::__construct($title,$firstName,$mainName,$price);//继承父类的构造函数 $this->playLength=$playLength; } functiongetPlayLength(){ return$this->playLength; } functiongetSummaryLine(){ $base=parent::getSummaryLine(); $base.=":playingtime{$this->playLength}"; return$base; } } classBookProductextendsShopProduct{ private$numPages=0; function__construct($title,$firstName,$mainName,$price,$numPages){ parent::__construct($title,$firstName,$mainName,$price); $this->numPages=$numPages; } functiongetnumPages(){ return$this->numPages; } functiongetSummaryLine(){ $base=parent::getSummaryLine(); $base.=":pagecount{$this->numPages}"; return$base; } } $dsn="sqlite:C:/Users/Administrator/Desktop/shop.db"; $pdo=newPDO($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程序设计有所帮助。