博客列表 >php:1. 实例演示属性与方法重载 2. 实例演示命名空间与类自动加载器

php:1. 实例演示属性与方法重载 2. 实例演示命名空间与类自动加载器

Time
Time原创
2022年04月29日 22:03:11462浏览

1.实例演示属性与方法重载

  1. <?php
  2. /**
  3. * 1.属性重载:__get(),__set();
  4. * 2.方法重载:__call(),__callStatic();
  5. */
  6. class User{
  7. private $data = [
  8. 'name' => '张老师',
  9. 'age' =>null,
  10. ];
  11. //查询拦截器
  12. public function __get($name){
  13. if(array_key_exists($name,$this->data)){
  14. return $this->data[$name];
  15. }
  16. return "属性{$name}不存在";
  17. }
  18. //更新拦截器
  19. public function __set($name,$value){
  20. //是否有键值
  21. if(array_key_exists($name,$this->data)){
  22. //是否合法
  23. if($name === 'age'){
  24. if($value>=18 && $value<=59){
  25. return $this->data[$name] = $value;
  26. }else{
  27. echo '年龄必须在18-59之间';
  28. }
  29. }else{
  30. return $this->data[$name] = $value;
  31. }
  32. }else{
  33. echo '禁止动态创建属性';
  34. }
  35. }
  36. //方法拦截器
  37. public function __call($name,$args){
  38. printf('方法:%s<br><pre> 参数:%s</pre>',$name,print_r($args,true));
  39. }
  40. //方静态法拦截器
  41. public static function __callStatic($name,$args){
  42. printf('方法:%s<br><pre> 参数:%s</pre>',$name,print_r($args,true));
  43. }
  44. }
  45. $user = new User;
  46. echo $user->name.'<br>';
  47. $user->age = 30;
  48. echo $user->age.'<br>';
  49. echo '<hr color=red>';
  50. $user->hello('name','张老师');
  51. User::word(1000,20000);

2. 实例演示命名空间与类自动加载器

命名空间:

  1. <?php
  2. /**
  3. * 命名空间使用namespace关键字声明,必须写到第一行
  4. * 一个脚本可以创建多个命名空间
  5. *
  6. */
  7. namespace ns1{
  8. //空间成员
  9. const APP = '商城';
  10. }
  11. //空间分级管理:子空间
  12. namespace ns2\ns3{
  13. const APP = '问答';
  14. echo APP . '<br>';
  15. }
  16. namespace ns2{
  17. //空间成员
  18. const APP = '社区';
  19. class Demo{}
  20. function index(){}
  21. //非限定名称:从当前空间查询
  22. echo APP . '<br>';
  23. //完全限定名称:从根空间开始查询
  24. echo \ns1\APP . '<br>';
  25. //限定名称:子空间 ns3\APP;
  26. echo ns3\APP;
  27. }

类自动加载器类自动加载器:

  1. <?php
  2. namespace ns1;
  3. //注册一个类的自动加载器
  4. /**
  5. * 1.一个文件一个命名空间一个类
  6. * 2.命名空间的名与成员路径一致
  7. * 3.类名与文件名一致
  8. */
  9. spl_autoload_register(function($class){
  10. $path = str_replace('\\',DIRECTORY_SEPARATOR,$class);
  11. echo $path;
  12. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  13. require $file;
  14. });
  15. new \php\Demo;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议