为了账号安全,请及时绑定邮箱和手机立即绑定

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

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 回答

public function __set($key, $val)
就是用魔术函数 __set 动态创建给私有成员属性设置值的,这里有两个参数,一个是参数的名称,一个是参数的值
而动态创建产生的对象属性是全局的并且无需声明就可以访问,所以当用$car = new Car(); $car->name = '汽车';
调用这个类和方法的时候,就是给$key和$val赋值了name和'汽车',所以当你echo的时候就会输出'汽车'
0 回复 有任何疑惑可以回复我~

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

听大佬们说的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信