小白教程

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

PHP 面向对象

发布者: 小白教程



方法的访问控制

类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

  1. <?php
  2. /**
  3. * Define MyClass
  4. */
  5. class MyClass
  6. {
  7. // 声明一个公有的构造函数
  8. public function __construct() { }
  9. // 声明一个公有的方法
  10. public function MyPublic() { }
  11. // 声明一个受保护的方法
  12. protected function MyProtected() { }
  13. // 声明一个私有的方法
  14. private function MyPrivate() { }
  15. // 此方法为公有
  16. function Foo()
  17. {
  18. $this->MyPublic();
  19. $this->MyProtected();
  20. $this->MyPrivate();
  21. }
  22. }
  23. $myclass = new MyClass;
  24. $myclass->MyPublic(); // 这行能被正常执行
  25. $myclass->MyProtected(); // 这行会产生一个致命错误
  26. $myclass->MyPrivate(); // 这行会产生一个致命错误
  27. $myclass->Foo(); // 公有,受保护,私有都可以执行
  28. /**
  29. * Define MyClass2
  30. */
  31. class MyClass2 extends MyClass
  32. {
  33. // 此方法为公有
  34. function Foo2()
  35. {
  36. $this->MyPublic();
  37. $this->MyProtected();
  38. $this->MyPrivate(); // 这行会产生一个致命错误
  39. }
  40. }
  41. $myclass2 = new MyClass2;
  42. $myclass2->MyPublic(); // 这行能被正常执行
  43. $myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行
  44. class Bar
  45. {
  46. public function test() {
  47. $this->testPrivate();
  48. $this->testPublic();
  49. }
  50. public function testPublic() {
  51. echo "Bar::testPublic\n";
  52. }
  53. private function testPrivate() {
  54. echo "Bar::testPrivate\n";
  55. }
  56. }
  57. class Foo extends Bar
  58. {
  59. public function testPublic() {
  60. echo "Foo::testPublic\n";
  61. }
  62. private function testPrivate() {
  63. echo "Foo::testPrivate\n";
  64. }
  65. }
  66. $myFoo = new foo();
  67. $myFoo->test(); // Bar::testPrivate
  68. // Foo::testPublic
  69. ?>

接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

  1. <?php
  2. // 声明一个'iTemplate'接口
  3. interface iTemplate
  4. {
  5. public function setVariable($name, $var);
  6. public function getHtml($template);
  7. }
  8. // 实现接口
  9. class Template implements iTemplate
  10. {
  11. private $vars = array();
  12. public function setVariable($name, $var)
  13. {
  14. $this->vars[$name] = $var;
  15. }
  16. public function getHtml($template)
  17. {
  18. foreach($this->vars as $name => $value) {
  19. $template = str_replace('{' . $name . '}', $value, $template);
  20. }
  21. return $template;
  22. }
  23. }

常量

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。

常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

实例

  1. <?php
  2. class MyClass
  3. {
  4. const constant = '常量值';
  5. function showConstant() {
  6. echo self::constant . PHP_EOL;
  7. }
  8. }
  9. echo MyClass::constant . PHP_EOL;
  10. $classname

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

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

Powered by Discuz! X3.4

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

返回顶部