Blogger Information
Blog 33
fans 0
comment 0
visits 17087
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
属性与方法重载 ,命名空间与类自动加载器
lucaslwk
Original
463 people have browsed it

属性与方法重载 ,命名空间与类自动加载器

属性与方法重载

属性与方法重载

  1. <?php
  2. class User
  3. {
  4. private $data = [
  5. 'age' => 20
  6. ];
  7. //属性重载
  8. //查询拦截器(属性名)
  9. public function __get($name)
  10. {
  11. if (array_key_exists($name, $this->data)) {
  12. return $this->data[$name];
  13. }
  14. return "属性{$name}不存在";
  15. }
  16. //更新拦截器(属性名,值)
  17. public function __set($name, $value)
  18. {
  19. //判断属性是否存在
  20. if (array_key_exists($name, $this->data)) {
  21. //判断属性值是否合法
  22. if ($value >= 18 && $value <= 59) {
  23. $this->data[$name] = $value;
  24. echo "已更新{$name},当前值为{$value}<br>";
  25. } else echo "{$name}的值{$value}不合法,无法更新<br>";
  26. } else {
  27. echo "属性{$name}不存在,无法更新<br>";
  28. }
  29. }
  30. //方法重载
  31. //方法拦截器
  32. public function __call($name, $arguments)
  33. {
  34. printf('方法: %s 参数:%s<br>', $name, print_r($arguments, true));
  35. }
  36. //静态方法拦截器
  37. public static function __callstatic($name, $arguments)
  38. {
  39. printf('静态方法: %s 参数:%s<br>', $name, print_r($arguments, true));
  40. }
  41. }
  42. $user = new User;
  43. echo $user->name . '<br>';
  44. echo $user->age . '<br>';
  45. $user->name = '张老师';
  46. $user->age = 29;
  47. $user->age = 15;
  48. $user->getName('王老师');
  49. User::getAge('30');

命名空间

命名空间

  1. <?php
  2. namespace ns1 {
  3. const ID = '1';
  4. }
  5. namespace ns2 {
  6. const ID = '2';
  7. }
  8. //空间分级管理子空间
  9. namespace ns3\ns4 {
  10. const ID = '4';
  11. }
  12. namespace ns3 {
  13. const ID = '3';
  14. //完全限定名称 根空间 \
  15. echo \ns1\ID . '<br>';
  16. echo \ns2\ID . '<br>';
  17. //非限定名称
  18. echo ID . '<br>';
  19. //限定名称
  20. echo ns4\ID . '<br>';
  21. }

类文件的自动加载器

类文件的自动加载器

  1. <?php
  2. namespace ns1;
  3. //类文件的自动加载器
  4. spl_autoload_register(function ($class) {
  5. //将输入的命名空间加类名转换为类文件的绝对路径
  6. $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
  7. //生成类文件的路径
  8. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  9. //导入文件
  10. require $file;
  11. $arr = [];
  12. array_push($arr, $class);
  13. array_push($arr, $path);
  14. array_push($arr, $file);
  15. //printf('<pre>%s<pre>', print_r($arr, true));
  16. });
  17. $obj1 = new \inc\demo1();
  18. $obj2 = new \inc\demo2();
  19. $obj3 = new \inc\demo3();
Correcting teacher:PHPzPHPz

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
Author's latest blog post