博主信息
博文 41
粉丝 0
评论 0
访问量 41658
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP类成员重载与命名空间
陈强
原创
1490人浏览过

重载

重载是指:当对一个对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”;

属性重载

对一个对象的不存在或者私有属性进行使用的时候,在类中预先设定好的应对办法

  • 取值:

当对一个对象的不存在的属性进行“取值”的时候,就会自动调用内部方法:__GET()

  1. class Demo
  2. {
  3. private $money = 100;
  4. public function __get($name)
  5. {
  6. echo '访问的属性不存在或权限不够!';
  7. }
  8. }
  9. $demo = new Demo;
  10. echo $demo->money;

  • 赋值:

当对一个对象的不存在的属性进行“赋值”的时候,就会自动调用内部方法:__SET()

  1. class Demo1
  2. {
  3. private $arr_list = [];
  4. public function __set($name, $value)
  5. {
  6. return $this->arr_list[$name] = $value;
  7. }
  8. }
  9. $demo = new Demo1;
  10. echo $demo->money = 2000;

  • 判断(isset):

当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用内部方法:__isset()

  1. class Demo1
  2. {
  3. private $arr_list = [];
  4. public $age = 1;
  5. public function __set($name, $value)
  6. {
  7. return $this->arr_list[$name] = $value;
  8. }
  9. public function __isset($name)
  10. {
  11. $age = isset($this->arr_list[$name]);
  12. return $age;
  13. }
  14. }
  15. $demo = new Demo1;
  16. echo $demo->money = 2000, '<br>';
  17. $demo1 = isset($demo->age);
  18. var_dump($demo1);

  • 销毁(unset):

当对一个对象的不存在的属性进行unset()销毁的时候,就会自动调用内部方法:__unset()

  1. class Demo1
  2. {
  3. private $arr_list = [];
  4. public $age = 1;
  5. public function __set($name, $value)
  6. {
  7. return $this->arr_list[$name] = $value;
  8. }
  9. public function __isset($name)
  10. {
  11. $age = isset($this->arr_list[$name]);
  12. return $age;
  13. }
  14. public function __unset($name)
  15. {
  16. unset($this->arr_list[$name]);
  17. }
  18. }
  19. $demo = new Demo1;
  20. echo $demo->money = 2000, '<br>';
  21. $demo1 = isset($demo->age);
  22. var_dump($demo1);
  23. echo '<br>';
  24. unset($demo->age);
  25. var_dump($demo2);

方法重载

当对一个对象的不存在的实例方法进行“调用”的时候,会自动调用类中的__call()这个魔术方法;

  1. class Demo
  2. {
  3. private $age;
  4. public function __call($name, $value)
  5. {
  6. echo '方法被调用';
  7. }
  8. }
  9. $demo = new Demo;
  10. // tell()方法不存在
  11. $demo->tell();

全局成员

全局成员有常量、函数、类,不能重复定义或者更新

  • 常量

const MAN = ‘jack’

  • 函数

function username()
{
echo ‘name is jack’;
}

class Demo
{
private $age;
}

命名空间

  1. //全局空间
  2. namespace {
  3. class Demo
  4. {
  5. private $age;
  6. }
  7. // 访问当前空间
  8. echo Demo::class, '<br>';
  9. // 访问name1空间
  10. echo \name1\Demo::class, '<br>';
  11. // 访问name2空间
  12. echo \name1\name2\Demo::class, '<br>';
  13. }
  14. //父空间
  15. namespace name1 {
  16. class Demo
  17. {
  18. private $age;
  19. }
  20. }
  21. //子空间
  22. namespace name1\name2 {
  23. class Demo
  24. {
  25. private $age;
  26. }
  27. }

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

批改状态:合格

老师批语:准确来讲,php中没有真正意义上的重载 ,其实重载是把双仞剑
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学