关于类的继承,私有化及final关键字等的一些思考

先说说我想达到的目的

所有的模型类共用AppModel中的方法,并且直接操作也是操作模型对象本身。

所以这里有个方法就很重要:get_called_class(),可以获取真实调用的子类的类名

当方法和属性都写好后,我怕AppModel的子类由于某种原因不小心把我父类的属性覆盖了怎么办,这样可能会导致方法数据计算错误

这时候私有化就很有用了,直接将AppMode类中的属性私有化,这样子类的定义就算和父类同名,也是互不影响的。

那如果子类想访问获取设置父类AppModel类中的私有属性怎么办?

这个时候get和set方法的作用就体现出来了,可以写两个方法,一个获取这个私有属性,一个用于修改这个私有属性

我怕别人不小心在子类中将我父类中的方法重写,而出现一些不可控的错误,但是又希望保持继承的关系

这个时候就可以用final关键字,用它来修饰方法可以保证方法不被子类重写

如果修饰类的话会使类变成最终类,也就是不可被继承的类。

我觉得一直用一个变量去调用一个方法这样很繁琐,我想实现链式调用用来方便我的操作

可以使用返回 t h i s , 在 方 法 结 束 后 返 回 this,在方法结束后返回 thisthis,这样实际在调用的时候并不需要用变量来保留,可以直接继续调用下一个方法。

我想定义一个永远不会被改变的变量

可以用const 关键字定义一个属性,一旦被const定义后在程序中就不能更改。访问也必须用静态调用。

对象可以直接调用静态方法吗?

可以,用对象的方式可以直接调用静态方法,但是反过来是不行的。普通方法只能通过实例化对象后调用。我想是因为静态方法优先加载于普通方法,所以用静态的方法去调用普通方法,那个时候普通方法都不存在,拿什么调用呢。又或者说是普通方法是存在于对象中的,对象都没有何来普通方法。

名词解释

重载和重写的区别?

重载是定义相同的方法名,但是参数不同。重载是在一个类中的操作。重载是编译时的多态性。
重写是子类重写父类的方法,重写是在子类和父类之间。重写是运行时的多态性。

get_called_class()和get_class()的区别?

get_class(),获取的是当前的类名
get_called_class(),获取后期静态绑定类的名称,也就是非转发调用中存储的类。

什么非转发调用和转发调用?

非转发调用:类名明确 A::functionA()
转发调用:self:: , parent:: , static:: , forward_static_call() , get_called_class()

来源公众号:php 全栈技术

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值