php5面向对象学习实例清单

■oop_01.php

<?php
class person{
  public $name="shuwill"; //定义public属性 $name ,如果改为private属性将出错,但若非要private属性,怎么办,看oop_02.php
}
$p=new person();  //创建对象
echo "his name is ".$p->name;
$p->name="tomore";   //变更姓名为 tomore
echo "<br />";
echo "his name is ".$p->name;
?>
________________________________________________________________________________

■oop_02.php

<?php
/*-----------php5类的方法------------*/
class person{
  private $name="shuwill"; //定义private属性 $name ,不能直接获取private属性的值,只能通过调用方法来获取
  public function getName(){ //定义方法
    return $this->name;  //在方法内部通过 $this-> 符号调用同一对象的属性;
  }
}
$p=new person();  //创建对象
echo "his name is ".$p->getName();
?>
________________________________________________________________________________

■oop_03.php  (存放地:公司/php_mysql/oop_03.php)<?php/*-----------带参数的方法------------*/


class person{
  private $a;
  public function setName($_a){
    $this->a=$_a;   //局部变量 $_a 传值给属性 a
  }
  public function getName(){
    return $this->a;  //返回属性 a
  }
}
$p=new person();
$p->setName("shuwill");
echo "his name is ".$p->getName();
echo "<br />";

//也可以直接给参数带上值
class human{
  private $a;
  public function setName($_a="shuwilltoo"){
    $this->a=$_a;
  }
  public function getName(){
    return $this->a;
  }
}
$bb=new human();
$bb->setName();
echo "his name is ".$bb->getName();
echo "<br />";
?>


________________________________________________________________________________

■oop_2-4-8.php 但这个实例,我还没理解透
2-4-8.php <br>
<!--通过$this传递对象
在这个例子中,我们写一个根据不同的年龄发不同的工资的类
我们设置处理年龄和工资的业务模型为一个独立的类.
-->
<?php
class User{
  private $age;
  private $sal;
  private $payoff;//声明全局属性
 
  //构造函数,并创建Payoff的对象.
  public function __construct(){
    $this->payoff = new Payoff();   
    //★★★
    /*【评】:通过构造函数,自动声明属性payoff是类Payoff的一实例*/
  }
  public function getAge(){
    return $this->age;
  }
  public function setAge($age){
    $this->age =$age;
  }
  //获得工资.
  public function getSal(){
    $this->sal = $this->payoff->figure($this);
     //★★★★★★★
     /*---------------------------------------------------------------
     时间:2009-06-30
     【评】:这是该类的精髓所在:
     方法getSal()的作用是:①返回属性sal的值;
                           ②将属性payoff中的方法figure的结果传给属性sal;
                           ③同时方法figure的参数是$this,为一对象,且是类User本身          
     --------------------------------------------------------------*/
    return $this->sal;
  }
}    

//这是对应工资和年龄关系的类  
class Payoff{    
  public function figure($a){  //★★★这里的参数将是一个对象
    $sal =0;
    $age =$a->getAge();
    /*★★★
    这一句,我反复看了多遍才明白,当时我的困惑是:
    $a为一对象,但并没有说是它是类User的一实例,又怎么可以调用方法getAge()呢?
    看看2009-06-30我的理解正确不正确*/
    if($age>80 || $age<16){
      $sal =0;
    }elseif($age>50){
      $sal=1000;
    }else{
      $sal=800;
    }
    return $sal;
  }
}
//实例化User
$user =new User();

$user->setAge(55);
echo $user->getAge(). "age, his sal is ".$user->getSal();    
echo "<br />";

$user->setAge(25);
echo $user->getAge(). "age, his sal is ".$user->getSal();    
echo "<br />";

$user->setAge(10);
echo $user->getAge(). "age, his sal is ".$user->getSal();    
echo "<br />";
    
?>

________________________________________________________________________________


■oop_2-5-1.php  <?php/*-----------用parent::调用父类的方法------------*/

<?php
//用parent::调用父类的方法
//声明一个员工类,经理类继承自员工类
class employer{
  protected $sal=3000;
  public function getSal(){
    $this->sal=$this->sal+1200;
    return $this->sal;
  }
}
class manager extends employer{
  //如果想让经理在员工的基础上多发1500元,
  //先要调用父类的方法
  public function getSal(){
    parent::getSal();  //这里调用了父类的方法
    $this->sal=$this->sal+1500;
    return $this->sal;
  }
}
$emp=new employer();
$manag=new manager();
echo "普通员工的工资是: ".$emp->getSal()."<br />";
echo  "经理的工资是: ".$manag->getSal(). "<br />";
?>

________________________________________________________________________________
posted @ 2009-06-10 15:08  尚远  阅读(513)  评论(0)    收藏  举报