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

属性重载:__get()

  1. class text{
  2. //属性
  3. private $data = [
  4. 'name' => '新手1314'
  5. ];
  6. //属性重载
  7. public function __get($user){
  8. //array_key_exists:检查数组里是否有指定的键名或索引
  9. if(array_key_exists($user,$this->data)){
  10. return $this ->data[$user];
  11. }
  12. return "属性{$user}不存在";
  13. }
  14. }
  15. $text = new text;
  16. echo $text ->name;
  17. //输出结果:新手1314

属性重载:__set()(更新拦截器)

  1. class text1{
  2. private $data = [
  3. 'age' => 14
  4. ];
  5. public function __get($user){
  6. if(array_key_exists($name,$this->data)){
  7. reutrn $this ->data[$user];
  8. }
  9. return "属性{$user}不存在";
  10. }
  11. //更新拦截器(动态)
  12. public function __set($name,$value){
  13. if(array_key_exists($name,$this ->data)){
  14. if($name === 'age'){
  15. if($value >= 18 && age <= 60){
  16. return $this -> data[$user] = $value;
  17. }else{
  18. echo '年龄必须在18-60之间';
  19. }
  20. }else{
  21. echo $this ->data[$user] = $value;
  22. }
  23. }else{
  24. echo '禁止动态创建属性';
  25. }
  26. }
  27. }
  28. $text1 =new text1;
  29. //动态创建属性
  30. $text1 ->age =4;
  31. echo $text1 ->age;
  32. //输出打印结果:年龄必须在18-60之间14

方法重载:__call()

  1. class text2{
  2. //方法拦截器
  3. public function __call($name,$args){
  4. printf('方法:%s<br><pre>%s</pre>',$name,print_r($args,true));
  5. }
  6. }
  7. $text2 =new text2;
  8. $text2 -> hello('新手1314','php.cn');
  9. //输出结果:方法:hello
  10. // 参数:
  11. // Array
  12. // (
  13. // [0] => 新手1314
  14. // [1] => php.cn
  15. // )

方法重载:__callStatic()

  1. class text3{
  2. //静态方法拦截器
  3. public static function __callStatic($name,$args){
  4. printf('方法:%s<br><pre>%s</pre>',$name,print_r($args,true));
  5. }
  6. }
  7. $text3 =new text3;
  8. text3::money(100,300);
  9. //输出结果:方法:money
  10. // Array
  11. // (
  12. // [0] => 100
  13. // [1] => 300
  14. // )

命名空间:解决全局成员的命名冲突

  1. namespace A{
  2. const name = '新手1314';
  3. }
  4. //命名空间的子空间
  5. namespace B\C{
  6. const name = 'php中文网';
  7. }
  8. namespace B{
  9. const name = '新手';
  10. echo name . '<br>';
  11. echo \A\name . '<br>';
  12. echo C\name . '<br>';
  13. }
  14. //全局空间,可访问当前所有的空间
  15. namespace{
  16. echo '子空间A的输出:'. \A\name.'<br>';
  17. echo '子空间B的输出:'. \B\name.'<br>';
  18. echo '子空间C的输出:'. \B\C\name;
  19. }
  20. //输出结果为:新手
  21. // 新手1314
  22. // php中文网
  23. // 子空间A的输出:新手1314
  24. // 子空间B的输出:新手
  25. // 子空间C的输出:php中文网

类自动加载器

  1. //spl_autoload_register:注册给定的函数作为 __autoload 的实现
  2. sql_autoload_register(function ($class){
  3. //str_replace:子字符串替换
  4. $path = str_replace('\\', DIRECTORY_SEPARATOR,$class);
  5. $file = __DIR__ .DIRECTORY_SEPARATOR.$path.'.php ';
  6. require $file;
  7. })
  8. new \php\cn\Zuoye;
  9. //输出结果:php\cn\Zuoye
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