PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解

yizhihongxing

当谈及PHP中的面向对象编程时,抽象、最终和静态是三个重要的关键词。它们各自都有非常特殊的意义和作用,下面将全面深入地讲解这三个关键词的原理和用法。

abstract(抽象)

抽象类不能被实例化,它仅仅是一个被继承的模板类。它的主要目的是让派生类可以简单地继承并且实现或者重写模板的一些方法或属性。通常情况下,抽象类中会定义一组抽象方法或属性,由子类去完成这些具体的实现。

示例:

<?php
abstract class Person {
    protected $name;
    public function __construct($name) {
        $this->name = $name;
    }
    abstract protected function introduce();
}

class Student extends Person {
    protected $age;
    public function __construct($name, $age) {
        parent::__construct($name);
        $this->age = $age;
    }
    public function introduce() {
        return "Hi, my name is {$this->name}, I'm {$this->age} years old.";
    }
}

$student = new Student("David", 20);
echo $student->introduce(); // Hi, my name is David, I'm 20 years old.
?>

在上面的例子中,Person 类是一个抽象类,使用 abstract 定义了一个抽象方法 introduce()Student 类继承了 Person 类,必须实现抽象方法 introduce()Student 类中同时也定义了自己的属性 $age,以及自己的构造函数 __construct()

final(最终)

final 用于修饰类、方法或者属性,表示这个类、方法或者属性是最终的,不能再被子类继承、重写或修改。final 不只是限定了对类的继承,同时也限定了父类中的某些方法,使得这些方法不能再被继承类中重新定义或修改。

示例:

<?php
class Animal {
    final public function introduce() {
        return "I am an animal.";
    }
}

class Dog extends Animal {
    public function introduce() {
        // Fatal error: Cannot override final method Animal::introduce()
        return "I am a dog.";
    }
}
?>

从上面的代码可以看出,Animal 类中,introduce() 方法被定义为 final,不能再被子类继承类或者修改。在 Dog 类中,使用了 introduce() 方法,最终会报错,因为这个方法已经被定义为 final 方法。

static(静态)

static 关键字用于修饰类、方法或者属性,静态成员不会被实例所持有,而是属于整个类,它可以被类的任何一个实例所共享。静态成员和非静态成员具有相同的访问权限。

示例:

<?php
class Calculator {
    public static function add($x, $y) {
        return $x + $y;
    }
}

echo Calculator::add(2, 3); // 5
?>

在上面的例子中,add() 方法被定义为 static 方法,在程序运行时,可以直接通过类名来访问这个方法,不需要实例化这个类。

总结

抽象、最终和静态三个关键词都是PHP面向对象编程中的重要概念。抽象可以让我们将一些共同的方法和属性放在一个基类中,从而避免在多个子类中重复编写。最终可以让我们限制对类和方法的继承、修改和重写,以提高代码的稳定性。静态可以让我们方便地使用一些全局变量或代码片段,以方面代码的维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 浅析php-fpm静态和动态执行方式的比较

    浅析php-fpm静态和动态执行方式的比较 前言 php-fpm 是 PHP 官方针对处理高并发等情况下的替代 FCGI 环境的进程管理器,相较于传统的 php-cgi 方式,php-fpm 众多的优异表现,比如在性能、应对并发、改善 PHP 进程管理等方面。 php-fpm 提供了两种执行方式:静态执行和动态执行。静态方式在 PHP-FPM 启动时,根据 …

    PHP 2023年5月26日
    00
  • php数组函数序列之array_values() 获取数组元素值的函数与方法

    PHP数组函数序列之array_values() 获取数组元素值的函数与方法 基本介绍 array_values() 函数返回一个包含给定数组的所有值的新数组,而不包括该数组的键名。 语法 array_values(array $array): array 参数 array:必需。规定要返回值的数组。 返回值 返回包含数组中所有值的新数组。 示例说明 示例一…

    PHP 2023年5月26日
    00
  • php输入流php://input使用浅析

    下面我会详细讲解“php输入流php://input使用浅析”的完整攻略。 什么是php输入流 php中可以使用多种方式获取HTTP请求中的POST或PUT参数,如$_POST、$_GET、file_get_contents(“php://input”)等。其中php://input就是php的输入流,这个流会在请求中储存所有的http请求内容,包括GET,…

    PHP 2023年5月26日
    00
  • PHP三层结构(下) PHP实现AOP

    介绍 在使用PHP进行开发时,为了保证代码的清晰和易维护,开发者往往会采用三层结构的设计模式。其中,控制层、业务逻辑层、数据访问层分别对应着应用中为实现不同功能而编写的代码块。 此外,AOP(面向切面编程)概念自提出以来被广泛应用于软件开发中,它能将与核心业务无关的分散的代码分离出来并注入到核心逻辑流程中。 本文将对PHP三层结构的实现以及AOP在其中的应用…

    PHP 2023年5月27日
    00
  • destoon找回管理员密码的方法

    destoon找回管理员密码的方法 作为一个网站管理员,如果忘记了自己的系统管理员密码,可以通过以下步骤找回。 第一步:进入destoon后台登录页面 在网站的前台或后台页面,找到可以进入后台的入口,输入您的用户名和错误的密码,H5 页面会展示:密码错误剩余 5 次,请谨慎操作。 如果您忘记了管理员用户名,可以通过查看数据库来找到。 第二步:找回密码入口 在…

    PHP 2023年5月24日
    00
  • MariaDB 新版本实力逆袭不仅仅是 MySQL 替代品

    MariaDB 新版本实力逆袭不仅仅是 MySQL 替代品 MariaDB 简介 MariaDB是MySQL的一个分支,是一个开源的关系数据库管理系统(RDBMS),由社区开发并由MariaDB公司支持和维护。MariaDB建立在MySQL的基础之上,添加了更多的开源特性和性能优化,并继续维护MySQL的API和命令语法,兼容MySQL的所有数据和应用程序。…

    PHP 2023年5月27日
    00
  • php实现递归与无限分类的方法

    关于 “PHP实现递归与无限分类的方法”,我给你提供以下攻略: 1. 什么是递归 递归是指一个函数不断调用自身的过程。在 PHP 中,递归可以非常方便地处理一些数据结构,如树形结构、嵌套数组等。 递归函数一般都包含两部分:递归结束条件和递归过程。 2. 实现递归的方法 实现递归的最常用方式是递归函数。下面是一个简单的递归函数的示例: function rec…

    PHP 2023年5月26日
    00
  • PHP程序级守护进程的实现与优化的使用概述

    PHP程序级守护进程的实现与优化的使用概述 什么是PHP程序级守护进程 PHP程序级守护进程是指在PHP中通过编写代码来创建一种特殊类型的程序,该程序能够在后台持续运行,并且在启动后不会退出,直到收到指定的停止信号才会退出。这种类型的程序被称为守护进程,它常常用于长时间运行的任务,如定时任务、消息队列等。 实现PHP程序级守护进程的方法 使用pcntl扩展库…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部