返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >带有类和对象的面向对象的 PHP
  • 781
分享到

带有类和对象的面向对象的 PHP

2024-02-27 20:02:55 781人浏览 安东尼
摘要

在本文中,我们将探索使用 PHP 类进行面向对象编程的基础知识。 我们将从类和对象的介绍开始,我们将在本文的后半部分讨论一些高级概念,如继承和多态性。 什么是面向对象编程 (OOP)? 面

在本文中,我们将探索使用 PHP 类进行面向对象编程的基础知识。

我们将从类和对象的介绍开始,我们将在本文的后半部分讨论一些高级概念,如继承和多态性。


什么是面向对象编程 (OOP)?

面向对象编程,通常称为 OOP,是一种帮助我们以易于长期维护和扩展的方式开发复杂应用程序的方法。 在 OOP 的世界中(在 php 中创建对象),现实世界中的实体,如 Person、Car 或 Animal 被视为对象。 在面向对象的编程中,我们通过使用对象与我们的应用程序进行交互。 这与我们主要与函数和全局变量交互的过程编程形成对比。

在 OOP 中,有一个“”的概念,用于将现实世界的实体建模或映射到数据(属性)和功能(方法)的模板。 “对象”是一个类的实例,我们可以创建同一个类的多个实例。 例如,只有一个 Person 类,但许多 person 对象可以是该类的实例——dan、zainab、hector 等。

该类定义属性。 例如,对于 Person 类,我们可能有姓名、年龄和电话号码。 然后每个人对象都会有自己的这些属性值。

我们还可以在类中定义方法,这些方法允许我们操纵对象属性的值并对对象执行操作。 例如,可以定义一个将对象信息保存到数据库的保存方法。

让我们继续深入学习如何在 PHP 中创建对象。


什么是 PHP 类?

首先我们需要了解什么是 PHP 类。 类是代表现实世界实体的模板,它定义实体的属性和方法。 在本节中,我们将讨论典型 PHP 类的基本结构。

理解新概念的最佳方式是举个例子。 因此,让我们看一下以下代码片段中的 Employee 类,它代表员工实体。


class Employee
{
  private $first_name;
  private $last_name;
  private $age;
 
  public function __construct($first_name, $last_name, $age)
  {
    $this->first_name = $first_name;
    $this->last_name = $last_name;
    $this->age = $age;
  }
  public function getFirstName()
  {
    return $this->first_name;
  }
  public function getLastName()
  {
    return $this->last_name;
  }
  public function getAge()
  {
    return $this->age;
  }
}

第一行的 class Employee 语句定义了 Employee 类。 然后,我们继续声明属性、构造函数和其他类方法。

PHP 中的类属性

我们可以将类属性视为用于保存有关对象信息的变量。 在上面的例子中,我们定义了三个属性——first_namelast_nameage。 在大多数情况下,类属性是通过实例化对象访问的。

这些属性是私有的,这意味着它们只能在 PHP 类中访问。 这是最安全的属性访问级别。 我们将在本文后面讨论 PHP 中类属性和方法的不同访问级别。

PHP 类的构造函数

构造函数是一种特殊的类方法,当我们实例化对象时会自动调用它。 我们将在接下来的几节中看到如何实例化对象,但现在我们只需要知道构造函数用于在创建对象时初始化对象属性。

我们可以通过定义 __construct 方法来定义构造函数。

PHP 类的方法

我们可以将 PHP 中的类方法视为执行与对象关联的特定操作的函数。 在大多数情况下,它们用于访问和操作对象属性并执行相关操作。

在上面的示例中,我们定义了 getLastName 方法,它返回与对象关联的姓氏。

以上就是对 PHP 类结构的简要介绍。 在下一节中,我们将看到如何实例化 Employee 类的对象。


什么是 PHP 中的对象?

在上一节中,我们讨论了 PHP 中类的基本结构。 现在,当你想使用一个类时,你需要实例化它,最终的结果是一个对象。 所以我们可以将类视为蓝图,而对象是我们可以使用的实际事物。

在我们刚刚在上一节中创建的 Employee 类的上下文中,让我们看看如何实例化该类的对象。


$objEmployee = new Employee('Bob', 'Smith', 30);
echo $objEmployee->getFirstName(); // print 'Bob' 
echo $objEmployee->getLastName(); // prints 'Smith' 
echo $objEmployee->getAge(); // prints '30'

当你想要实例化任何类的对象及其类名时,你需要使用 new 关键字,你将取回该类的一个新对象实例。

如果一个类定义了 __construct 方法并且它需要参数,则在实例化对象时需要传递这些参数。 在我们的例子中,Employee 类构造函数需要三个参数,因此我们在创建 $objEmployee 对象时传递了这些参数。 正如我们之前讨论的,__construct 方法在对象被实例化时被自动调用。

接下来,我们在 $objEmployee 对象上调用类方法来打印在对象创建期间初始化的信息。 当然,我们可以创建同一个类的多个对象,如以下代码片段所示。


$objEmployeeOne = new Employee('Fql', 'Jiyik', 30);
echo $objEmployeeOne->getFirstName(); // prints 'Fql' 
echo $objEmployeeOne->getLastName(); // prints 'Jiyik' 
echo $objEmployeeOne->getAge(); // prints '30' 
$objEmployeeTwo = new Employee('Opw', 'Jiyik', 34);
echo $objEmployeeTwo->getFirstName(); // prints 'Opw' 
echo $objEmployeeTwo->getLastName(); // prints 'Jiyik' 
echo $objEmployeeTwo->getAge(); // prints '34'

下图是 Employee 类及其一些实例的图形表示。

php 实例化对象

简而言之,类是我们可以用来创建结构化对象的蓝图。


封装

在上一节中,我们讨论了如何实例化 Employee 类的对象。 值得注意的是,$objEmployee 对象本身将类的属性和方法包装在一起。 换句话说,它向程序的其余部分隐藏了这些细节。 在 OOP 的世界里,这被称为数据封装。

封装是 OOP 的一个重要方面,它允许我们限制对对象的某些属性或方法的访问。 这将我们带到另一个讨论主题:访问级别。

访问级别

在类中定义属性或方法时,可以将其声明为具有以下三种访问级别之一—— publicprivateprotected

public 访问

当我们将属性或方法声明为 public 时,可以从类之外的任何地方访问它。 可以从代码中的任何位置修改公共属性的值。

让我们看一个例子来理解 public 访问级别。


class Person
{
  public $name;
  public function getName()
  {
    return $this->name;
  }
}
$person = new Person();
$person->name = 'jiyik';
echo $person->getName(); // prints 'jiyik'

正如我们在上面的示例中看到的,我们已将 name 属性声明为公共。 因此,我们可以从类之外的任何地方设置它,就像我们在这里所做的那样。

private 访问

当我们将属性或方法声明为私有时,只能从类中访问它。 这意味着我们需要定义 gettersetter 方法来获取和设置该属性的值。

同样,让我们修改前面的示例以了解私有访问级别。


class Person
{
  private $name;
  public function getName()
  {
    return $this->name;
  }
  public function setName($name)
  {
    $this->name = $name;
  }
}
$person = new Person();
$person->name = 'jiyik'; // 抛出错误 
$person->setName('jiyik');
echo $person->getName(); // prints 'jiyik'

如果我们尝试从类外部访问私有属性,它将抛出致命错误无法访问私有属性 Person::$name。 因此,我们需要使用 setter 方法设置私有属性的值,就像我们使用 setName 方法所做的那样。

我们可能希望将财产设为私有,这有充分的理由。 例如,如果该属性发生变化,也许应该采取一些行动(例如更新数据库或重新呈现模板)。 在这种情况下,我们可以定义一个 setter 方法并在属性更改时处理任何特殊逻辑。

protected 访问

最后,当我们将属性或方法声明为受保护时,定义它的同一个类和继承相关类的类都可以访问它。 我们将在下一节讨论继承,所以我们稍后会回到受保护的访问级别。


继承

继承是面向对象编程范例的一个重要方面,它允许我们通过扩展其他类来继承它们的属性和方法。 被继承的类称为父类,继承其他类的类称为子类。 当你实例化一个子类的对象时,它也继承了父类的属性和方法。

让我们看看下面的截图来理解继承的概念。

PHP 面向对象 继承

在上面的例子中,Person 类是父类,Employee 类扩展或继承了 Person 类,因此称为子类。

让我们尝试通过一个真实的例子来理解它是如何工作的。


class Person
{
  protected $name;
  protected $age;
  public function getName()
  {
    return $this->name;
  }
  public function setName($name)
  {
    $this->name = $name;
  }
  private function callToPrivateNameAndAge()
  {
    return "{$this->name} is {$this->age} years old.";
  }
  protected function callToProtectedNameAndAge()
  {
    return "{$this->name} is {$this->age} years old.";
  }
}
class Employee extends Person
{
  private $designation;
  private $salary;
  public function getAge()
  {
    return $this->age;
  }
  public function setAge($age)
  {
    $this->age = $age;
  }
  public function getDesignation()
  {
    return $this->designation;
  }
  public function setDesignation($designation)
  {
    $this->designation = $designation;
  }
  public function getSalary()
  {
    return $this->salary;
  }
  public function setSalary($salary)
  {
    $this->salary = $salary;
  }
  public function getNameAndAge()
  {
    return $this->callToProtectedNameAndAge();
  }
}
$employee = new Employee();
$employee->setName('Jiyik');
$employee->setAge(30);
$employee->setDesignation('Software Engineer');
$employee->setSalary('30K');
echo $employee->getName(); // prints 'Jiyik' 
echo $employee->getAge(); // prints '30' 
echo $employee->getDesignation(); // prints 'Software Engineer' 
echo $employee->getSalary(); // prints '30K' 
echo $employee->getNameAndAge(); // prints 'Jiyik is 30 years old.' 
echo $employee->callToPrivateNameAndAge(); // produces 'Fatal Error'

这里需要注意的是,Employee 类已经使用了 extends 关键字来继承 Person 类。 现在,Employee 类可以访问 Person 类的所有声明为 publicprotected 的属性和方法。 (它不能访问声明为 private 的成员。)

在上面的示例中,$employee 对象可以访问 Person 类中定义的 getName 和 setName 方法,因为它们被声明为公共的。

接下来,我们使用 Employee 类中定义的 getNameAndAge 方法访问了 callToProtectedNameAndAge 方法,因为它被声明为受保护的。 最后,$employee 对象无法访问 Person 类的 callToPrivateNameAndAge 方法,因为它被声明为私有的。

另一方面,我们可以使用 $employee 对象来设置 Person 类的 age 属性,就像我们在 Employee 类中定义的 setAge 方法中所做的那样,因为 age 属性被声明为受保护的。

这就是对继承的简要介绍。 它可以帮助我们减少代码重复,从而促进代码的可重用性。


多态性

多态性是面向对象编程领域的另一个重要概念,它指的是根据对象的数据类型以不同方式处理对象的能力。

例如,在继承的上下文中,如果子类想要改变父类方法的行为,它可以覆盖那个方法。 这称为方法覆盖。 让我们快速通过一个真实世界的例子来理解方法覆盖的概念。


class Message
{
  public function fORMatMessage($message)
  {
    return printf("<i>%s</i>", $message);
  }
}
class BoldMessage extends Message
{
  public function formatMessage($message)
  {
    return printf("<b>%s</b>", $message);
  }
}
$message = new Message();
$message->formatMessage('Hello World'); // prints '<i>Hello World</i>' 
$message = new BoldMessage();
$message->formatMessage('Hello World'); // prints '<b>Hello World</b>'

如大家所见到的,我们通过在 BoldMessage 类中覆盖 formatMessage 方法来更改它的行为。 重要的是消息的格式根据对象类型而不同,无论它是父类还是子类的实例。

注意 :一些面向对象的语言也有一种方法重载,可以让你定义多个具有相同名称但参数数量不同的类方法。 这在 PHP 中不直接支持,但是有一些解决方法可以实现类似的功能。


结论

现在我们了解了使用 PHP 类进行面向对象编程的基础知识。 面向对象编程是一个庞大的主题,我们只是触及了它的复杂性的表面。 我确实希望本篇文章能帮助大家开始了解 OOP 的基础知识,并能激励大家继续学习更高级的 OOP 知识。

--结束END--

本文标题: 带有类和对象的面向对象的 PHP

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

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

猜你喜欢
  • 带有类和对象的面向对象的 PHP
    在本文中,我们将探索使用 PHP 类进行面向对象编程的基础知识。 我们将从类和对象的介绍开始,我们将在本文的后半部分讨论一些高级概念,如继承和多态性。 什么是面向对象编程 (OOP)? 面...
    99+
    2024-02-27
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2024-04-02
  • python 面向对象、类、对象
    class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承 python中通过类和对象来实现 ...
    99+
    2023-01-31
    面向对象 对象 python
  • Python面向对象的类和对象怎么使用
    这篇文章主要介绍“Python面向对象的类和对象怎么使用”,在日常操作中,相信很多人在Python面向对象的类和对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面向对象的类和对象怎么使用...
    99+
    2023-06-22
  • 面向对象编程的基础:PHP中类和对象的构建
    在当今 Web 开发处于顶峰的数字时代,开发人员必须深入了解面向对象编程 (OOP) 及其如何应用于 PHP。PHP 是一种服务器端脚本语言,已经发展了多年,面向对象的 PHP 是现代 Web 开发的一个基础。在这篇文章中,我们将深入研究面...
    99+
    2023-11-07
    php PHP面向对象编程
  • Python面向对象之入门类和对象
    目录什么是面向对象编程?定义类,从具体代码来感受吧!多个类和对象的观察补充一下类的属性(数据部分)总结什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了。 ...
    99+
    2024-04-02
  • PHP面向对象02:面向对象高级
    PHP面向对象02:面向对象高级 一、设计模式1. 单例模式2. 工厂模式 二、面向对象三大特性1. 封装2. 继承3. 多态 三、继承1. 实现继承2. 有限继承a. 属性都能继承b...
    99+
    2023-09-01
    php 单例模式 开发语言
  • Python面向对象中类和对象的示例分析
    这篇文章主要介绍了Python面向对象中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是面向对象编程?我们是不是听过面向过程,拿来放在一起对比就比较好理...
    99+
    2023-06-22
  • Java面向对象类和对象实例详解
    目录1 - Java面向对象学习的三条主线2 - 面向过程与面向对象3 - 面向对象的三大特征4 - 面向对象分析方法分析问题的思路和步骤5 - 面向对象的思想概述6 - 类和对象的...
    99+
    2024-04-02
  • python中面向对象_类_对象的概念与
    1. 面向对象的概念,面向对象是一种编程思想。 是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型     2.  面向对象和面向过程的区别: 面向过程关注的是完成工作的步骤。 面向对象关注的是谁能完成工作。 面...
    99+
    2023-01-30
    面向对象 对象 概念
  • Java面向对象和类的定义
    本篇内容介绍了“Java面向对象和类的定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、面向对象面向对象是在程序中使用对象来映射现实中的...
    99+
    2023-06-15
  • python面向对象,类
    1:类和对象    是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球体出来。2:类的定义    类把需要的变量和函数组合成一起,这种...
    99+
    2023-01-31
    面向对象 python
  • Java面向对象:抽象类的学习
    本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习 一.什么是抽象类二.抽象类语...
    99+
    2023-09-11
    java 学习 jvm
  • 【PHP】PHP的面向对象编程
    PHP面向对象编程是PHP编程的一个重要方向,它通过将数据和操作封装在对象中,使得代码更加模块化、可重用性和易于维护。本文将介绍PHP面向对象编程的基本概念、核心思想和常见应用,并探讨使用PHP面向对...
    99+
    2023-09-08
    php android 开发语言
  • 面向对象的主要Python类
    本篇内容主要讲解“面向对象的主要Python类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“面向对象的主要Python类”吧!对象可以使用普通的属于对象的变量存储数据。属于一个对象或Python...
    99+
    2023-06-17
  • python面相对象之类和对象
      类和对象是python面相对象中两个重要的概念,类是客观世界中事物的抽象,而对象是类实例后的变量,比如汽车模型可以造出各种各样的汽车,汽车模型就是类,汽车就是汽车模型抽象出来的实例,这里有必要还有说一下方法,函数在类中叫方法,比如汽车...
    99+
    2023-01-31
    对象 面相 python
  • Java 面向对象 之 抽象类 abstract
    转载于 : http://www.verejava.com/id=16992804621647 public class TestAbstract {public static&n...
    99+
    2023-06-02
  • php面向对象中类的定义方法
    这篇文章主要介绍php面向对象中类的定义方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Ph...
    99+
    2023-06-14
  • 课时37:类与对象:面向对象编程
    目录:   一、self是什么   二、Python的魔法方法   三、公有和私有   四、课时37课后习题及答案   ***************** 一、self是什么 ***************** 对象的方法都有一个self...
    99+
    2023-01-30
    课时 面向对象 对象
  • 面向对象
    面向对象 特性 class  object 封装、继承、多态 语法:属性、方法 构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数) 析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关...
    99+
    2023-01-30
    面向对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作