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

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:

高级特性

包括:

1.静态方法和属性(通过类而不是对象来访问数据和功能)

2.抽象类和接口(设计,实现分离)

3.错误处理(异常)

4.Final类和方法(限制继承)

5.拦截器(自动委托)

6.析构方法(对象销毁前的清理工作)

7.克隆对象(创建对象的副本)

8.把对象解析成字符串

PS,学会从内存的角度看代码。想象计算机的微观世界。

静态方法的小例子

class StaticExample{

static public $aNum = 10;

static public function sayHello(){

print "hello";

}

}

print StaticExample::$aNum."
";

StaticExample::sayHello();

tips:

1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。

2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。

静态方法的大例子

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值