博主信息
博文 145
粉丝 7
评论 7
访问量 202193
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP基础知识:类的拦截器和重载以及命名空间
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
原创
1063人浏览过

一、类中常见魔术函数(拦截重载)

1.魔术方法

  • __construct():类的构造函数
  • __destruct():类的析构函数(不能带有任何参数)
  • __call():在对象中调用一个不可访问方法时调用
  • __callStatic():用静态方式中调用一个不可访问方法时调用
  • __get():获得一个类的成员变量时调用
  • __set():设置一个类的成员变量时调用
  • __isset():当对不可访问属性调用isset()或empty()时调用
  • __unset():当对不可访问属性调用unset()时被调用。
  • __sleep():执行serialize()时,先会调用这个函数
  • __wakeup():执行unserialize()时,先会调用这个函数
  • __toString():类被当成字符串时的回应方法
  • __invoke():调用函数的方式调用一个对象时的回应方法
  • __set_state():调用var_export()导出类时,此静态方法会被调用。
  • __clone():当对象复制完成时调用

二、命名空间

1.命名空间的基本组成:命名空间关键字:namespace+空间名字+空间中主体内容,例如:namespace one或者namespace one{……}
2.命名的空间的思维系统文件夹原理,使用来解决php中全局成员的命名冲突(类、函数、常量)
3.命名空间多层级的写法:namespace one\two\three;
4.当前空间中调用后代命名空间的写法:(可省略当前命名空间名字直接从子级命名空间开始写):在two空间中调用子空间中的类方法three\Demo::show()
5.当前空间中调用父级命名空间的写法:(从根命名空间开始写):在two空间中调用父级空间中的类方法\one\Demo::show()
6.知识点:

  • clone:实例化对象后的赋值引用赋值,使用关键字clone可以完成对对象的复制得到新的独立的对象;例如:$obj1=clone $obj;

实战练习

(一)魔术函数练习

1.代码

  1. <?php
  2. class Demo
  3. {
  4. public $name;
  5. private $age;
  6. //构造函数
  7. public function __construct($name,$age){
  8. $this->name=$name;
  9. $this->age=$age;
  10. }
  11. public function __toString(){
  12. return "我是一个类";
  13. }
  14. public function __invoke(){
  15. return "我是一个类";
  16. }
  17. public function __get($name){
  18. return "未定义的属性或无访问权限";
  19. }
  20. public function __set($name,$value){
  21. printf('%s(%s)没有此属性',$name,$value);
  22. }
  23. public function __wakeup(){
  24. echo "反序列成功";
  25. }
  26. public function __sleep(){
  27. // echo "序列化";
  28. return ["a","b"];
  29. }
  30. public function __call($func,$argv){
  31. echo $func."[".implode(",",$argv)."]";
  32. }
  33. static public function __callStatic($func,$argv){
  34. echo $func."[".implode(",",$argv)."]";
  35. }
  36. // 析构函数
  37. // public function __destruct(){
  38. // echo "销毁实列";
  39. // }
  40. }
  41. $demo=new Demo("ldy",20);
  42. echo $demo."<br>";
  43. echo $demo()."<br>";
  44. echo $demo->name."<br>";
  45. echo $demo->myname."<br>";
  46. echo "<hr>";
  47. $demo->sex="男";
  48. echo "<br>";
  49. $demo->name="dlf";
  50. echo $demo->name."<br>";
  51. echo "<hr>";
  52. $string=serialize($demo);
  53. echo $string."<br>";
  54. unserialize($string);
  55. echo "<hr>";
  56. $demo->func(2,3);
  57. Demo::func(4,6,5);
  58. // unset($demo);//销毁$demo实列
  59. echo "<br>";

2.运行结果

(二)命名空间

1.代码

  1. <?php
  2. namespace one
  3. {
  4. class Demo
  5. {
  6. }
  7. // function func(){
  8. // echo "我是one中的函数";
  9. // }
  10. func();//函数在当前空间没有时,会自动向上层空间查找直到摘掉位置;常量和函数相同;但类只会在当前空间查找
  11. echo \Demo::class."<br>";
  12. echo Demo::class."<br>";
  13. echo two\Demo::class."<br>";
  14. }
  15. namespace one\two
  16. {
  17. class Demo
  18. {
  19. }
  20. echo Demo::class."<br>";
  21. echo \one\Demo::class."<br>";
  22. echo \Demo::class."<br>";
  23. }
  24. namespace {
  25. class Demo
  26. {
  27. }
  28. function func(){
  29. echo "我是跟空间函数";
  30. }
  31. func();
  32. echo Demo::class."<br>";
  33. echo one\Demo::class."<br>";
  34. echo one\two\Demo::class."<br>";
  35. }

2.运行结果

(三)命名空间的使用

1.代码
demo11-1.php

  1. <?php
  2. namespace one;
  3. $name="种业圈";

demo11-2.php

  1. <?php
  2. namespace one;
  3. function show($name){
  4. echo "Hello,".$name;
  5. }

demo11.php

  1. <?php
  2. namespace one;
  3. include "demo11-1.php";
  4. include "demo11-2.php";
  5. show($name);

2.运行结果:

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学