Welcome

首页 / 网页编程 / PHP / PHP对象、模式与实践之高级特性分析

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:
高级特性
包括:
1.静态方法和属性(通过类而不是对象来访问数据和功能)
2.抽象类和接口(设计,实现分离)
3.错误处理(异常)
4.Final类和方法(限制继承)
5.拦截器(自动委托)
6.析构方法(对象销毁前的清理工作)
7.克隆对象(创建对象的副本)
8.把对象解析成字符串
PS,学会从内存的角度看代码。想象计算机的微观世界。
静态方法的小例子
<?phpclass StaticExample{static public $aNum = 10;static public function sayHello(){print "hello";}}print StaticExample::$aNum."<br/>";StaticExample::sayHello();
tips:
1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。
2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。
静态方法的大例子
<?phpclass 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程序设计有所帮助。