Blogger Information
Blog 29
fans 0
comment 0
visits 19523
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP实例演示命名空间与类自动加载器
千里马遇伯乐
Original
532 people have browsed it

1.命名空间实例演示

  1. <?php
  2. /**
  3. * 1.属性重载:__get(),set__()
  4. * 2.方法属性:__call(),__callStatic()
  5. */
  6. class User
  7. {
  8. // 属性
  9. private $data = ['age'=>20];
  10. //查询拦截器
  11. public function __get($name){
  12. //$name:属性名
  13. // return $this->name;
  14. if (array_key_exists($name,$this->data)) {
  15. return $this->data[$name];
  16. }
  17. return "属性{$name}不存在";
  18. }
  19. //更新拦截器
  20. public function __set($name,$value)
  21. {
  22. //1.有没有这个属性?
  23. if (array_key_exists($name,$this->data)){
  24. //2.这个值是否合法?
  25. if ($name === 'age') {
  26. if ($value>=18 && $value<=59) {
  27. $this->data[$name] = $value;
  28. } else {
  29. echo '年龄必须在18-59岁之间';
  30. }
  31. } else {
  32. // 以上操作仅对age有效,其它属性值直接赋值
  33. $this->data[$name] = $value;
  34. }
  35. } else {
  36. echo '禁止动态创建属性';
  37. }
  38. }
  39. //方法拦截器
  40. public function __call($name,$args){
  41. // $name:方法名,$args:传给方法的参数
  42. printf('方法:%s<br>参数:<pre>%s</pre>',$name,print_r($args,true));
  43. }
  44. //静态方法拦截器
  45. public static function __callStatic($name,$args){
  46. // $name:方法名, $args:传给方法的参数
  47. printf('方法:%s<br>参数:<pre>%s</pre>',$name,print_r($args,true));
  48. }
  49. }
  50. $user = new User;
  51. echo $user->name.'<br>';
  52. /**
  53. * 为一个属性赋值的时候,必须要搞清楚2件事
  54. * 1. 有没有这个属性?
  55. * 2. 这个值是否合法?
  56. */
  57. $user->age = 29;
  58. echo $user->age.'<br>';
  59. echo '<hr>';
  60. // 常规方法/非静态方法/用实例调用
  61. $user->hello('老师', 'php.cn');
  62. echo '<hr>';
  63. // 静态方法
  64. User::world(100,200);

2.类自动加载器实例

  1. /**
  2. * 命名空间
  3. * 1. 一个文件中, 只允许声明一个命名空间并只写一个类
  4. * 2. 命名空间的命名,应该与成员的路径一致
  5. * 3. 类名,必须与类文件名对应
  6. */
  7. namespace ns1;
  8. require __DIR__ . '/autoloader.php';
  9. class Demo2
  10. {
  11. }
  12. // new \php\cn\Demo2;
  13. echo Demo2::class . '<br>';
  14. echo \php\cn\Demo2::class;

3.注册一个类的自动加载器

  1. // 注册一个类的自动加载器
  2. spl_autoload_register(function ($class) {
  3. // echo $class;
  4. // 1. 将命名空间=>映射到一个类文件的绝对路径
  5. $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
  6. // 2. 生成类文件路径
  7. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  8. // 3. 加载这个类文件
  9. require $file;
  10. });
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
Author's latest blog post