为什么类里没有name这个属性,$car->name = '汽车';还能运行

来源:2-9 PHP类和对象之重载

DimensionPlane

2018-07-27 17:25

class Car {
    private $ary = array();
    
    public function __set($key, $val) {
        $this->ary[$key] = $val;
    }
    
    public function __get($key) {
        if (isset($this->ary[$key])) {
            return $this->ary[$key];
        }
        return null;
    }
    
    public function __isset($key) {
        if (isset($this->ary[$key])) {
            return true;
        }
        return false;
    }
    
    public function __unset($key) {
        unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽车';  //name属性动态创建并赋值
echo $car->name;


写回答 关注

2回答

  • Mayukiii73
    2019-01-03 22:32:04
    public function __set($key, $val)
    就是用魔术函数 __set 动态创建给私有成员属性设置值的,这里有两个参数,一个是参数的名称,一个是参数的值
    而动态创建产生的对象属性是全局的并且无需声明就可以访问,所以当用$car = new Car(); $car->name = '汽车';
    调用这个类和方法的时候,就是给$key和$val赋值了name和'汽车',所以当你echo的时候就会输出'汽车'
  • DimensionPlane
    2018-07-27 17:31:11

    动态产生的对象属性是全局性的,这与变量无需声明就可访问是一脉相承的
    但是由于一些学究的批评,php 开始逐渐放弃这种轻巧的表述方法了
    所以,应该尽量不要这样做

    听大佬们说的

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181728 学习 · 2575 问题

查看课程

相似问题