Blogger Information
Blog 47
fans 3
comment 0
visits 38244
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类成员重载、全局成员、命名空间声明与访问、命名空间分解与合并、子命名空间访问
Original
611 people have browsed it

1. 类成员重载

  • 访问或设置类中不存在的属性或方法时,自动调用魔术方法

  1. <?php
  2. class Demo
  3. {
  4. protected $data = [
  5. 'username' => 'guest'
  6. ];
  7. //属性重载
  8. public function __get($name)
  9. {
  10. $method = 'get' . ucfirst($name);
  11. return $this->$method($name);
  12. }
  13. // 获取器
  14. public function getUsername($name)
  15. {
  16. if (!isset($this->data[$name])) {
  17. $this->data[$name] = 0;
  18. } else {
  19. return $this->data[$name];
  20. }
  21. }
  22. public function getEmail($name)
  23. {
  24. if(!isset($this->data[$name])) {
  25. $this->data[$name] = 0;
  26. } else {
  27. return $this->data[$name];
  28. }
  29. }
  30. public function __set($name, $value)
  31. {
  32. $method = 'set' . ucfirst($name);
  33. return $this->$method($name,$value);
  34. }
  35. // 设置器
  36. public function setEmail($name,$value)
  37. {
  38. $this->data[$name] = $value;
  39. }
  40. // 方法重载
  41. // 普通方法:__call()
  42. // 静态方法:__callStatic()
  43. public function __call($name,$args)
  44. {
  45. // 请求转发
  46. return $name . '[' . implode(',',$args) . ']';
  47. }
  48. // 当访问一个不存在的静态方法,会定位到下面这个魔术方法中
  49. public static function __callStatic($name, $args)
  50. {
  51. return $name . '[' . implode(',',$args) . ']';
  52. }
  53. }
  54. $obj = new Demo;
  55. echo $obj->username,'<br>';
  56. $obj->email = 'guest@qq.com';
  57. echo $obj->email;
  58. echo '<br>';
  59. echo $obj->world(1,2,3);
  60. echo '<br>';
  61. echo Demo::test('a','b','b');

2. 全局成员有哪几种,有什么特点

全局成员:类,常量,函数
特点:不能重复声明

  1. <?php
  2. // 类
  3. class Mod
  4. {
  5. public $mod = __CLASS__;
  6. }
  7. // 常量
  8. const TITLE = 'Hello';
  9. // 函数
  10. function con()
  11. {
  12. return __FUNCTION__;
  13. }
  14. echo (new Mod)->mod,'<br>';
  15. echo TITLE,'<br>';
  16. echo con();

3. 空间的声明与空间成员的访问

  1. <?php
  2. // 命名空间
  3. namespace ns1 {
  4. // 类
  5. class Mod1
  6. {
  7. }
  8. // 常量
  9. const TITLE = '标题';
  10. // 函数
  11. function test()
  12. {
  13. }
  14. echo Mod1::class, '<br>';
  15. echo TITLE::class, '<br>';
  16. echo test::class, '<br>';
  17. }
  18. // 全局空间
  19. namespace {
  20. echo '<hr>';
  21. // 类
  22. class Mod1
  23. {
  24. }
  25. // 常量
  26. const TITLE = '标题';
  27. // 函数
  28. function test()
  29. {
  30. }
  31. echo Mod1::class, '<br>';
  32. echo TITLE::class, '<br>';
  33. echo test::class, '<br>';
  34. }

4. 空间成员的分解与合并操作

  • 文件:demo.php
  1. <?php
  2. namespace ns;
  3. require 'test1.php';
  4. require 'test2.php';
  5. echo Test1::class,'<br>';
  6. echo Test2::class,'<br>';
  • 文件:test1.php
  1. <?php
  2. namespace ns;
  3. class Test1
  4. {
  5. public $username = 'guest';
  6. }
  • 文件:test2.php
  1. <?php
  2. namespace ns;
  3. class Test2
  4. {
  5. public $title = 'php中文网';
  6. }

5. 子空间访问任何空间中的成员

  1. <?php
  2. // 父空间
  3. namespace test1 {
  4. class Demo
  5. {}
  6. echo Demo::class,'<br>';
  7. // namespance:用在空间中,表示当前空间的引用,类似于$this或self
  8. echo test2\Demo::class,'<br>';
  9. echo test2\test3\Demo::class,'<hr>';
  10. }
  11. // test1的子空间
  12. namespace test1\test2 {
  13. class Demo
  14. {
  15. //...
  16. }
  17. echo Demo::class,'<br>';
  18. echo test3\Demo::class,'<hr>';
  19. }
  20. // test2的子空间
  21. namespace test1\test2\test3 {
  22. class Demo
  23. {
  24. //...
  25. }
  26. echo Demo::class,'<br>';
  27. // 在test3中访问上级空间
  28. echo \test1\test2\Demo::class,'<br>';
  29. echo \test1\Demo::class,'<br>';
  30. // 全局成员:前面加上全局空间的标识符:\
  31. echo \Demo::class,'<br>';
  32. }
  33. // 全局空间
  34. namespace {
  35. class Demo
  36. {
  37. }
  38. }
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments