php入门教程之面向对象
第一种情况:子类没有定义构造函数时,默认继承。
第二种情况:子类定义了构造函数,则不会被继承。
对于4.x,如果父类恰好定义了子类的同名函数,则会被当做子类的构造函数,实例代码如下:
class A { function A() { echo "I am the constructor of A.<br>n" ; } function B() { echo "I am a regular function named B in class A.<br>n" ; echo "I am not a constructor in A.<br>n" ; } } class B extends A { function C() { echo "I am a regular function.<br>n" ; } } //php4 will call B() $b = new B;上面的代码在php5中则会调用A而不会调用B()
PHP面向对象:接口实例
我们设计一个在线销售系统,用户部分设计如下,将用户分为,NormalUser, VipUser, InnerUser三种,要求根据用户的不同折扣计算用户购买产品的价格,并要求为以后扩展和维护预留空间,用户部分先声明了一个接口User,用户都是User的实现。
user.php 代码如下:
<? /* * 定义了 User接口. * 和子类 NormalUser,VipUser,InnerUser */ //User接口,定义了三个抽象方法. interface User{ public function getName(); public function setName( $_name ); public function getDiscount(); } abstract class AbstractUser implements User{ private $name = "" ; //名字 protected $discount = 0; //折扣 protected $grade = "" ; //级别 public function __construct( $_name ){ $this ->setName( $_name ); } public function getName(){ return $this ->name; } public function setName( $_name ){ $this ->name = $_name ; } public function getDiscount(){ return $this ->discount; } public function getGrade(){ return $this ->grade; } } class NormalUser extends AbstractUser { protected $discount = 1.0; protected $grade = "NormalUser" ; } class VipUser extends AbstractUser { protected $discount = 0.8; protected $grade = "VipUser" ; } class InnerUser extends AbstractUser { protected $discount = 0.7; protected $grade = "InnerUser" ; } ?>关于产品,我们进行了如下设计,声明一个接口Product,然后从Product继承下Book接口,在线销售的图书最后是实现了Book接口的BookOnline类。
Product.php 代码如下:
<? /*与产品相关的类放.*/ Interface Product{ //定义产品接口 public function getProductName(); public function getProductPrice(); } interface Book extends Product { // book是产品的一个分类 public function getAuthor(); } class BookOnline implements Book{ // 定义book类. private $productName ; // 产品名 private $productPrice ; // 产品价格 private $author ; //作者 public function __construct( $_bookName ){ $this ->productName = $_bookName ; //这里放置相关初始化的代码. //与数据库关联的代码. } public function getProductName(){ return $this ->productName; } public function getProductPrice(){ //这里从数据库读取价格. //假设价格是 100元. $this ->productPrice = 100; return $this ->productPrice; } public function getAuthor(){ //从数据库里面取值. return $this ->author; } } ?>关于结算,我们使用了独立的结算类,使用静态方法做计算,产品结算,注意参数类型,代码如下:
<? include_once ( "User.php" ); include_once ( "Product.php" ); //买了产品到底多少钱呢? class ProductSettle{ public static function finalPrice(User $_user ,Product $_product , $number = 1){ $price = $_user ->getDiscount() * $_product ->getProductPrice() * $number ; return $price ; } } ?>下面的例子是实现,大家可以自己分析下,实例代码如下:
<? include_once ( "./class/User.php" ); include_once ( "./class/Product.php" ); include_once ( "./class/ProductSettle.php" ); $number = 10; $book = new BookOnline( "设计模式" ); $user = new NormalUser( "Tom" ); $price = ProductSettle::finalPrice( $user , $book , $number ); $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; $str .= "购买 $number 本 《 " . $book ->getProductName() ; $str .= "》的价格是 $price <br><br>" ; echo $str ; $user = new vipUser( "Tom" ); $price = ProductSettle::finalPrice( $user , $book , $number ); $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; $str .= "购买 $number 本 《 " . $book ->getProductName() ; $str .= "》的价格是 $price <br><br>" ; echo $str ; $user = new InnerUser( "Tom" ); $price = ProductSettle::finalPrice( $user , $book , $number ); $str = "您好,尊敬的用户 " . $user ->getName() . " <br>" ; $str .= "您的级别是 " . $user ->getGrade() . ", <br>" ; $str .= "您的折扣是 " . $user ->getDiscount() . "<br>" ; $str .= "购买 $number 本 《 " . $book ->getProductName() ; $str .= "》的价格是 $price <br><br>" ; echo $str ; ?>查看更多关于php入门教程之面向对象 - php面向对象的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29667