好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php入门教程之面向对象 - php面向对象

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面向对象的详细内容...

  阅读:43次