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

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.运行结果:

更多相关文章

  1. 命名空间类三种引用、类导入命名冲突解决、自动加载类、mysql操
  2. 命名空间类名三种引用-命名冲突解决-自动加载-数据库操作
  3. 描述类成员的重载、全局成员以及命名空间
  4. PHP类成员重载与命名空间
  5. 类与对象之重载和命名空间的概念
  6. PHP类成员的重载与命名空间
  7. PHP基础: 类的重载和命名空间的部分知识(声明, 调用,分解与合并,
  8. 类成员重载、全局成员、命名空间声明与访问、命名空间分解与合并
  9. 类成员重载-全局成员-命名空间声明访问分解合并-子空间访问任何

随机推荐

  1. 用Node.js把HTML转成PDF格式[每日前端夜
  2. Python数据科学:Logistic回归
  3. Python表白?别傻了,女神是拿来撩的!
  4. 用Node.js创建安全的 GraphQL API[每日前
  5. 奥斯卡,究竟谁一直在陪跑。
  6. 如何正确使用Node.js事件[每日前端夜话0x
  7. JavaScript 中的强制类型转换[每日前端夜
  8. 大江大河,一代人的缩影。
  9. 用Python生成抖音字符视频!
  10. 用Python将HTML转为PDF。