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程序设计有所帮助。