博客列表 >类与对象、oop封装性、构造器 . 魔术方法的应用:属性重载与方法重载 , 类的原生自动加载,类的继承与功能扩展

类与对象、oop封装性、构造器 . 魔术方法的应用:属性重载与方法重载 , 类的原生自动加载,类的继承与功能扩展

飞天001
飞天001原创
2023年04月18日 17:31:45436浏览

类与对象、oop封装性、构造器 . 魔术方法的应用:属性重载与方法重载 , 类的原生自动加载,类的继承与功能扩展

1.类与对象,oop封装性,构造方法

类与对象

  1. //创建类
  2. class User{}
  1. //类的实例化,即创建对象
  2. $mj = new User();

OOP的封装性

  1. //类属性的访问修饰符,实现了类OOP的封装性
  2. public string $name;
  3. private int $salary;
  4. protected int $age;

构造方法

  1. // __construct(){}构造方法
  2. public function __construct($name,$salary,$age){
  3. //$this代表本对象(实例化的对象)
  4. $this->name = $name;
  5. $this->salary = $salary;
  6. $this->age = $age;
  7. }

2. 类的原生自动加载

  1. /**类的自动加载器 */
  2. spl_autoload_register(function ($className) {
  3. // echo $className; //加载的类名称
  4. $classFile = __DIR__ . DS . 'class' . DS . $className . '.php';
  5. if (is_file($classFile) && file_exists($classFile)) require $classFile;
  6. });

3. 属性重载和方法重载

属性的重载

  1. // !当访问当前环境下未定义或不可访问的类属性时 ,重载方法__get会被调用。
  2. public function __get($name)
  3. {
  4. return $this->data[$name];
  5. }
  6. // !当给当前环境下未定义或不可访问的类属性赋值时 ,重载方法__set会被调用。
  7. public function __set($name, $value)
  8. {
  9. $this->data[$name] = $value;
  10. }

方法的重载

  1. // !当访问当前环境下未定义或不可访问的类普通方法时 ,重载方法__call会被调用。
  2. public function __call($name, $args)
  3. {
  4. if ($name == 'show') {
  5. return $this->data;
  6. }
  7. if ($name == 'sum') {
  8. // var_dump($args);
  9. return array_sum($args);
  10. }
  11. }

4. 类的继承与功能扩展

类的继承

  1. class Son extends Product
  2. {
  3. // 扩展属性
  4. public string $brand;
  5. // override 重写
  6. public function __construct($name, $price, $num, $brand)
  7. {
  8. // parent:: 调用父类成员
  9. parent::__construct($name, $price, $num);
  10. $this->brand = $brand;
  11. }
  12. // 重写show方法
  13. public function show()
  14. {
  15. return <<<SHOW
  16. 1. 品名:$this->name
  17. 2. 价格:$this->price
  18. 3. 数量:$this->num
  19. 4. 品牌:$this->brand
  20. SHOW;
  21. }
  22. }

功能的扩展

  1. // 功能扩展
  2. public function total()
  3. {
  4. return "$this->name,数量为{$this->num},总计" . ($this->price * $this->num) . '元';
  5. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议