详谈PHP中public,private,protected,abstract等关键字的用法

当谈到PHP中的关键字时,public、private、protected和abstract肯定是不可忽略的。在下面的攻略中,我将详细讲解这些关键字的用法,并为您提供两个示例,帮助您更好地理解它们的概念和用途。

public, private和protected

public、private和protected是用于控制类的属性和方法可见性的关键字。

public

public会使该属性或方法可以在类内部和外部被访问。这意味着,可以从类的任何地方访问该属性或方法。

class Person {
    public $name = 'Bob';
    public function sayHello() {
        echo "Hello, I'm {$this->name}.";
    }
}

$person = new Person();
echo $person->name; // 输出 Bob
$person->sayHello(); // 输出 Hello, I'm Bob.

private

private会使该属性或方法仅可在类内部访问。这意味着,无法从类的外部访问该属性或方法。

class Person {
    private $name = 'Bob';
    private function sayHello() {
        echo "Hello, I'm {$this->name}.";
    }
}

$person = new Person();
echo $person->name; // 报错,无法访问私有属性
$person->sayHello(); // 报错,无法访问私有方法

protected

protected会使该属性或方法在类内部、子类和父类中可见,但在类的外部不可见。

class Person {
    protected $name = 'Bob';
    protected function sayHello() {
        echo "Hello, I'm {$this->name}.";
    }
}

class Student extends Person {
    public function intro() {
        echo "My name is {$this->name}.";
    }
}

$student = new Student();
echo $student->name; // 报错,无法访问受保护属性
$student->sayHello(); // 报错,无法访问受保护方法
$student->intro(); // 输出 My name is Bob.

abstract

abstract关键字用于声明抽象类或抽象方法。

抽象类

抽象类是一个不完整的类,它只定义了一些方法的签名(名称、参数、返回类型),并没有具体实现。抽象类无法直接实例化,只能被继承。

abstract class Shape {
    protected $color;
    public function setColor($color) {
        $this->color = $color;
    }
    abstract public function getArea();
}

class Circle extends Shape {
    private $radius;
    public function __construct($radius) {
        $this->radius = $radius;
    }
    public function getArea() {
        return pi() * pow($this->radius, 2);
    }
}

$circle = new Circle(5);
$circle->setColor('red');
echo $circle->getArea(); // 输出 78.539816339745

抽象方法

抽象方法没有具体实现,只有方法的签名。抽象方法必须声明在抽象类中,并且所有子类必须实现这些抽象方法。

abstract class Shape {
    abstract public function getArea();
}

class Circle extends Shape {
    private $radius;
    public function __construct($radius) {
        $this->radius = $radius;
    }
    public function getArea() {
        return pi() * pow($this->radius, 2);
    }
}

class Triangle extends Shape {
    private $base;
    private $height;
    public function __construct($base, $height) {
        $this->base = $base;
        $this->height = $height;
    }
    public function getArea() {
        return ($this->base * $this->height) / 2;
    }
}

$circle = new Circle(5);
echo $circle->getArea(); // 输出 78.539816339745

$triangle = new Triangle(5, 7);
echo $triangle->getArea(); // 输出 17.5

通过以上两个示例,您现在应该理解了public、private、protected和abstract关键字在PHP中的使用方法和作用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详谈PHP中public,private,protected,abstract等关键字的用法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • ThinkPHP中类的构造函数_construct()与_initialize()的区别详解

    题目要求详细讲解 “ThinkPHP中类的构造函数_construct()与_initialize()的区别详解”,下面针对这个话题,我将从以下几个方面进行详细的讲解: 什么是构造函数和初始化函数 二者的区别 示例说明 构造函数和初始化函数 在介绍二者的区别之前,我们需要了解一下什么是构造函数和初始化函数。 构造函数 构造函数(Constructor Fun…

    other 2023年6月26日
    00
  • 解决svn每次操作都需要重输入用户名密码问题

    解决 SVN 每次操作都需要重新输入用户名密码问题 如果你经常使用 SVN 进行代码的版本控制,你可能会遇到每次对版本库进行操作都需要重新输入用户名密码的问题。这个问题可能会让你感到很困扰,因为每次都需要输入用户名和密码会导致你的工作效率降低。 这个问题的主要原因是 SVN 默认不会缓存用户的用户名和密码,每次使用 SVN 都需要重新输入。但是,SVN 提供…

    其他 2023年3月29日
    00
  • 关于python:删除文件或文件夹

    下面是关于“关于python:删除文件或文件夹”的完整攻略: 1. 删除文件 在Python中,可以使用os模块的remove()函数来删除文件。以下是一个示例,演示了如何使用remove()函数删除文件: import os # 删除文件 os.remove("example.txt") 在上面的示例中,我们使用os.remove()函…

    other 2023年5月7日
    00
  • 原生js添加一个或多个类名的方法分析

    原生js添加一个或多个类名的方法分析 在使用JavaScript操作DOM元素时,我们经常需要对元素的类名进行操作,比如添加一个类名,删除一个类名,或者查询一个元素是否包含某个类名。本篇攻略将会解析原生JavaScript中添加一个或多个类名的方法。 使用Element.classList属性 在ES5之前,我们需要手动操作元素的className属性来处理…

    other 2023年6月27日
    00
  • win10系统下耳机插前面板没有声音怎么办?解决方法

    如果在Win10系统下插入耳机到前面板,但是没有声音,可以尝试以下解决方法: 检查音频驱动程序 首先,需要检查计算机的频驱动程序是否正确安装。可以通过以下步骤检查: 任务栏上右键单击音量图标,选择“音量调节”。 在“音量调节器”窗口中,单击“备属性”。 在“设备属性”窗口中,选择“驱动”选项卡,然后单击“更新驱动程序”按钮。 驱动程序需要更新,系统会自动下载…

    other 2023年5月7日
    00
  • React深入分析useEffect源码

    以下是详细讲解“React深入分析useEffect源码”的完整攻略: React深入分析useEffect源码 useEffect 简介 在 React 组件中,我们经常需要进行一些副作用操作,比如访问 DOM 元素、调用一些 API 接口等等,而 useEffect 就是用来处理这些副作用操作的。 useEffect 接收一个函数作为参数,该函数会在每次…

    other 2023年6月27日
    00
  • 【操作系统】使用BCD工具安装Ubuntu操作系统

    操作系统:使用BCD工具安装Ubuntu操作系统的完整攻略 BCD(Boot Configuration Data)是Windows操作系统中的一个重要组件,它用于管理系统启动时的配置信息。在安装Ubuntu操作系统时,我们可以使用BCD工具来配置系统启动项,从而实现多系统启动。本文将介绍使用BCD工具安装Ubuntu操作系统的完整攻略,并提供两个示例说明。…

    other 2023年5月5日
    00
  • 苹果IOS13Beta1全机型固件下载地址 苹果iOS13固件下载

    苹果iOS 13 Beta 1全机型固件下载攻略 苹果iOS 13 Beta 1是苹果公司最新发布的测试版操作系统,为了方便用户体验和测试,以下是详细的固件下载攻略。 步骤一:注册苹果开发者账号 在下载iOS 13 Beta 1之前,您需要注册一个苹果开发者账号。请按照以下步骤进行操作: 打开苹果开发者网站(https://developer.apple.c…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部