前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于类的继承,私有化及final关键字等的一些理解

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

作者头像
用户8568307
发布2022-04-18 14:35:41
4050
发布2022-04-18 14:35:41
举报
文章被收录于专栏:PHP全栈技术
先说说我想达到的目的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

名词解释

重载和重写的区别?

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

get_called_class()和get_class()的区别?

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

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

  • 非转发调用:类名明确 A::functionA()
  • 转发调用:self:: , parent:: , static:: , forward_static_call() , get_called_class()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP全栈技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先说说我想达到的目的
  • 当方法和属性都写好后,我怕AppModel的子类由于某种原因不小心把我父类的属性覆盖了怎么办,这样可能会导致方法数据计算错误
  • 那如果子类想访问获取设置父类AppModel类中的私有属性怎么办?
  • 我怕别人不小心在子类中将我父类中的方法重写,而出现一些不可控的错误,但是又希望保持继承的关系
  • 我觉得一直用一个变量去调用一个方法这样很繁琐,我想实现链式调用用来方便我的操作
  • 我想定义一个永远不会被改变的变量
  • 对象可以直接调用静态方法吗?
  • 名词解释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档