深入理解PHP之设置类的属性

事实上,PHP并没有强制所以的属性都要在类中声明。我们可以动态地添加属性到对象,如下所示:

class A {
    public $id = "12345";
    public $name = "aaa";
}
$a = new A();
$a->sex = "man";
print($a->sex);

但是,这种给对象赋属性的方法在面向对象编程中并不是一个良好的做法,我们基本上不用。至少,据我目前所知,C++、Java是不能直接这样添加的,可能会有一些其他的方法(用list、map)。
为什么说动态设置属性是一个坏习惯?因为你在创建类的时候就已经定义了数据类型,说明这个类(以及由类实例化的对象)是由特定的字段和函数集合组成。如果A类定义了一个$name属性,那么之后任何和a对象一起工作的代码都假设$name属性是可用的,但新增动态属性则没有这种保证。也就是说,你在实例化另一个对象aa时,它并不具有$sex这个属性,将会使程序报错。

$aa = new A();
print($aa->sex);

输出:

man
( ! ) Notice: Undefined property: A::$sex in ***

而且,还会有其他的不良影响,如拼错或忘记属性姓名时并不会的到警告。例如,错误的把这一行

$a->name = "aaa";

写作

$a->namee = "aaa";

因为PHP引擎认为这一行代码完全合法,所以不会发出警告。当我们开始输入名字时将会出现意想不到的效果。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值