小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 PHP系列教程 查看内容

PHP 面向对象

发布者: 小白教程



方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例中重写了 getUrl 与 getTitle 方法:

  1. function getUrl() {
  2. echo $this->url . PHP_EOL;
  3. return $this->url;
  4. }
  5. function getTitle(){
  6. echo $this->title . PHP_EOL;
  7. return $this->title;
  8. }

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。

属性的访问控制

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

  1. <?php
  2. /**
  3. * Define MyClass
  4. */
  5. class MyClass
  6. {
  7. public $public = 'Public';
  8. protected $protected = 'Protected';
  9. private $private = 'Private';
  10. function printHello()
  11. {
  12. echo $this->public;
  13. echo $this->protected;
  14. echo $this->private;
  15. }
  16. }
  17. $obj = new MyClass();
  18. echo $obj->public; // 这行能被正常执行
  19. echo $obj->protected; // 这行会产生一个致命错误
  20. echo $obj->private; // 这行也会产生一个致命错误
  21. $obj->printHello(); // 输出 Public、Protected 和 Private
  22. /**
  23. * Define MyClass2
  24. */
  25. class MyClass2 extends MyClass
  26. {
  27. // 可以对 public 和 protected 进行重定义,但 private 而不能
  28. protected $protected = 'Protected2';
  29. function printHello()
  30. {
  31. echo $this->public;
  32. echo $this->protected;
  33. echo $this->private;
  34. }
  35. }
  36. $obj2 = new MyClass2();
  37. echo $obj2->public; // 这行能被正常执行
  38. echo $obj2->private; // 未定义 private
  39. echo $obj2->protected; // 这行会产生一个致命错误
  40. $obj2->printHello(); // 输出 Public、Protected2 和 Undefined
  41. ?>

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 01:48 , Processed in 0.016991 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部