广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >【PHP面试题05】private、protected、public、final 区别是什么
  • 398
分享到

【PHP面试题05】private、protected、public、final 区别是什么

javascript限定词PHPJava 2023-09-12 07:09:39 398人浏览 安东尼
摘要

文章目录 一、介绍二、四种限定词区别2.1 private2.2 protected2.3 public2.4 final 总结 一、介绍 本文已收录于PHP全栈系列专栏:PHP

文章目录


一、介绍

本文已收录于PHP全栈系列专栏:PHP面试专区
计划将全覆盖php开发领域所有的面试题对标资深工程师/架构师序列,欢迎大家提前关注定。

关于这几个限定词,是一些比较基础的面试题,一般我们肯定知道他们的用法,但是为什么这么用,很多时候还是值得思考的。今天本文就这几种情况进行一下说明,各位面试的宝宝记得先给一个关注或者收藏,避免以后找不到了。

在PHP中,类成员和方法有不同的访问级别。访问级别定义了一个成员或方法谁能够访问它。PHP中有四个访问级别:private、protected、public和final。本篇博文将介绍这几个访问级别,并分析它们之间的区别。

二、四种限定词区别

2.1 private

当成员或方法被声明为private时,它只能在所属类内部被访问。外部代码不能访问这个成员或方法。我们来看一个例子:

class Person {    private $name;    public function showName() {        echo $this->name;    }}$person = new Person();$person->name = "XiaoMin"; // 这里会报错,因为$name是private类型

在上面的例子中,我们创建了一个类Person,其中包含一个私有成员 n a m e 。 s h o w N a m e ( ) 方法尝试输出 name。showName()方法尝试输出 nameshowName()方法尝试输出name的值,但由于 n a m e 的访问级别是 p r i v a t e ,而外部代码又直接尝试给 name的访问级别是private,而外部代码又直接尝试给 name的访问级别是private,而外部代码又直接尝试给name赋值,所以程序报错。

需要注意的是,子类无法访问父类中的私有成员或方法。下面是一个例子:

class Person {    private $name;}class Student extends Person {    public function showName() {        echo $this->name; // 这里会报错,因为$name是private类型    }}

在上面的例子中,我们定义了一个父类Person和一个子类Student。子类Student尝试在showName()方法中输出父类Person中的私有成员$name,但由于$name的访问级别是private,所以程序报错。

2.2 protected

当成员或方法被声明为protected时,它只能在所属类和子类中被访问。外部代码不能访问这个成员或方法。接下来我们看一个例子:

class Person {    protected $name;}class Student extends Person {    public function showName() {        echo $this->name; // 可以访问父类中的$name    }}$student = new Student();$student->name = "XiaoMin"; // 这里会报错,因为$name是protected类型

在上面的例子中,我们定义了一个父类Person和一个子类Student。父类Person包含一个受保护的成员$name,子类Student可以访问该成员并将其输出。但外部代码不能直接访问该成员,否则会报错。

需要注意的是,在子类中调用父类的受保护方法时,可以使用parent关键字。下面是一个例子:

class Person {    protected $name;    protected function getName() {        return $this->name;    }}class Student extends Person {    public function showName() {        echo parent::getName(); // 调用父类的getName()方法    }}

在上面的例子中,我们定义了一个父类Person和一个子类Student。父类Person包含一个受保护的getName()方法,该方法返回$name的值。子类Student通过调用parent::getName()方法来获取$name的值。

2.3 public

当成员或方法被声明为public时,它可以在任何地方被访问,包括类内部、子类和外部代码。下面是一个例子:

class Person {    public $name;}$person = new Person();$person->name = "XiaoMin"; // 可以直接访问$name

在上面的例子中,我们定义了一个类Person,并将$name成员声明为public访问级别。外部代码可以直接访问该成员并给它赋值。

需要注意的是,尽管public成员可以在任何地方被访问,但这并不代表我们应该在代码中到处使用public成员。这样做可能会增加代码的复杂性,并使代码更难以维护。因此,我们应该尽可能地对类成员使用private或protected访问级别,只有在真正需要时才将其改为public。

2.4 final

当一个类或方法被声明为final时,它不能被继承或覆盖。下面是一个例子:

final class Person {    protected $name;    public function showName() {        echo $this->name;    }}class Student extends Person { // 这里会报错,因为Person类是final的,不能被继承}

在上面的例子中,我们定义了一个类Person,并将其声明为final。这意味着Person类不能被继承。子类Student尝试从Person类中继承成员和方法,但由于Person类是final的,所以程序报错。

需要注意的是,虽然final成员和方法不能被覆盖,但它们仍然可以被子类继承和访问。

总结

本篇博文介绍了PHP中的四种访问级别:private、protected、public和final。private成员和方法只能在所属类内部被访问,protected成员和方法可以在所属类和子类中被访问,public成员和方法可以在任何地方被访问,final类和方法不能被继承或覆盖。在编写代码时,应该根据具体情况选择适当的访问级别,避免滥用public成员和方法。

来源地址:https://blog.csdn.net/qq_21891743/article/details/131321317

--结束END--

本文标题: 【PHP面试题05】private、protected、public、final 区别是什么

本文链接: https://www.lsjlt.com/news/404110.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作