0 Comments

 类的组合与继承(1)

发布于:2012-12-27  |   作者:广州网站建设  |   已聚集:人围观

        在1.1节的代码中定义了两个类,一个是person,一个是family;在family类中创建person类中的对象,把这个对象视为family类的一个属性,并调用它的方法处理问题,这种复用方式叫“组合”。还有一种复用方式,就是继承。

           类与类之间有一种父与子的关系,子类继承父类的属性和方法,称为继承。在继承里,子类拥有父类的方法和属性,同时子类也可以有自己的方法和属性。

          可以把1.1节的组合用继承实现,如代码清单1-6所示。广州网站建设

代码清单1-6 family_extends.php


  1. <?php 
  2. class person{  
  3. public $name='Tom';  
  4. public $gender;  
  5. static $money=10000;  
  6. public function construct(){  
  7. echo '这里是父类',PHP_EOL;  
  8. }  
  9. public function say(){  
  10. echo $this->name," \tis ",$this->gender,"\r\n";  
  11. }  
  12. }  
  13. class family extends person{  
  14. public $name;  
  15. public $gender;  
  16. public $age;  
  17. static $money=100000;  
  18. public function construct(){  
  19. parent::construct();// 调用父类构造方法  
  20. echo '这里是子类',PHP_EOL;  
  21. }  
  22. public function say(){  
  23. parent::say();  
  24. echo $this->name," \tis\t",$this->gender,",and  
  25. is\t",$this->age,PHP_EOL;  
  26. }  
  27. public function cry(){  
  28. echo parent::$money,PHP_EOL;  
  29. echo '%>_<%',PHP_EOL;  
  30. echo self::$money,PHP_EOL;// 调用自身构造方法  
  31. echo '(*^^*)';  
  32. }  
  33. }  
  34. $poor=new family();  
  35. $poor->name='Lee';  
  36. $poor->gender='female';  
  37. $poor->age=25;  
  38. $poor->say();  
  39. $poor->cry(); 

 

运行上面的代码,可以得到如下输出结果:

  1. 这里是父类  
  2. 这里是子类  
  3. Lee is female  
  4. Lee is female,and is 25  
  5. 10000  
  6. %>_<%  
  7. 100000  
  8. (*^^*) 

           从上面代码中可以了解继承的实现。在继承中,用parent指代父类,用self指代自身。使用“::”运算符(范围解析操作符)调用父类的方法。“::”操作符还用来作为类常量和静态方法的调用,不要把这两种应用混淆。

          既然提到静态,就再强调一点,如果声明类成员或方法为static,就可以不实例化类而直接访问,同时也就不能通过一个对象访问其中的静态成员(静态方法除外),也不能用“::”访问一个非静态方法。比如,把上例中的$poor->cry();换成$poor::cry(),按照这个规则,应该是要报错的。可能试验时,并没有报错,而且能够正确输出。这是因为用“::”方式调用一个非静态方法会导致一个E_STRICT级别的错误,而这里的PHP设置默认没有开启这个级别的报错提示。打开PHP安装目录下的php.ini文件,设置如下:


  1. error_reporting = E_ALL| E_STRICT  
  2. display_errors = On 

 

       再次运行,就会看到错误提示。因此,用“::”访问一个非静态方法不符合语法,但PHP仍然能够正确地执行代码,这只是PHP所做的一个“兼容”或者说“让步”。在开发时,设置最严格的报错等级,在部署时可适当调低。
飞机