PHP类成员重载与命名空间

2021年02月23日 19:51:31阅读数:31博客 / 陈强 / PHP

重载

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

属性重载

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

  • 取值:

当对一个对象的不存在的属性进行“取值”的时候,就会自动调用内部方法:__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中没有真正意义上的重载 ,其实重载是把双仞剑

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    陈强
    博文
    40
    粉丝
    0
    评论
    0
    访问量
    2229
    积分:1
    P豆:87