重载

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

属性重载

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

  • 取值:

当对一个对象的不存在的属性进行“取值”的时候,就会自动调用内部方法:__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. }

更多相关文章

  1. 多线程基础知识
  2. 接口的基本属性
  3. Android Studio生成签名文件方法
  4. PHP基础概念:继承、扩展和trait方法集
  5. PHP基础: 类(class)的声明,实例化,静态成员和类的扩展﹑trait的功
  6. PHP基础: 接口与抽象类
  7. 一文读懂 JAVA 异常处理
  8. 几种Linux系统切换内核启动顺序方法
  9. Java反射机制:跟着代码学反射

随机推荐

  1. android 用VideoView播放本地视频文件
  2. 【Android】简单图片浏览器
  3. Android 解决Toast的延时显示问题
  4. Android中编码实现软件界面
  5. Android APP--建立简单的交互界面
  6. Android应用中使用Popupmenu
  7. Android安卓开发官方文档国内镜像
  8. android欢迎界面并执行任务
  9. Android中添加syslog功能
  10. SMS Library in Android