欢迎来到在线课程《PHP中的OOP》的第一篇文章。有关完整的文章清单,请访问概览页。
内容说明:
这个系列的目标是最好地解释面向对象编程的精髓,这样你就不必花几百个小时去实验那些没有意义的东西了。所有的技术和教程都来自于实践,并按照我自己在学习编程时的想法来解释。一些的概念被大大简化*,以牺牲100%的事实正确性为代价,因为我相信,**主要理解原则,至少对问题有一些了解,总比迷失在编程中,把一切都看成一个大麻烦要好。
你很快就会看到,用OOP编程对你的代码有巨大的好处。它将为你的应用程序带来一个新的抽象水平,并允许你解决非常复杂的问题,而这些问题是其他方式无法实现的。
在编程的基本概念中,对象是特殊的数据类型,除了自身的价值外,还可以定义详细的状态、方法、行为,并允许你进行各种操作,就像现实世界中一样。
编程中的对象是类似于现实世界中的 "东西",我们可以为其命名(例如,通过一个名词),并具有类似于现实世界中事物的属性。例如,一个对象可以是一篇文章,它有一些值(标题、内容、作者、出版日期,......)和方法(插入新的标题、阅读内容、计算出版后的天数,......)。在这篇文章中,我们将主要讨论如何在基本水平上创建和使用该对象。
正如我们已经确定的,物是存在的东西。在这个阶段,"存在 "这个词非常重要,因为我们很快就会看到,在编程中仍有一个实际的实现需要处理。
因为在编程中,我们是在写代码,而对象是 "活 "的东西,从这一点开始,我们将区分两个不同的概念,在这里,详细了解其含义并严格区分是很重要的。
由于我们在编程时总是把代码写成静态字符串(文本),我们将把程序区分为 "类"(整个对象的静态定义)和 "对象"(类的一个 "活 "实例)。
类定义的例子。
class Article{public string $title;public ?string $autor = null;}
实践说明:。
在真正的应用中,每个类通常被写入一个单独的PHP文件,该文件的名称与类的名称相同。
因此,对于
文章'类,例如,我们创建
src/Article.php`。这个约定在PHP中不是必须的,但它有助于使应用程序更易读,这样你就不会把很多代码放在一起了。每个类在整个应用程序中最多只能存在一次(有一个唯一的名字),但可以有(几乎)无限多的实例(取决于RAM容量)。此外,一个类不能被分割成多个文件,必须在一个地方一次性定义。如果你需要创建多个同名的类,请使用命名空间。
我们还将在后面说明,结构良好的代码将允许它在许多项目中被重用。
这段代码定义了一个有两个属性(title'和
author')的`Article'类。 PHP忽略了注释,只将其用于静态类型检查(通常由PhpStorm读取)。
代码。
public string $title;
指的是properties
的定义,它是Article
类的一个属性。我们可以认为Article'是一种字段,
title'是它的索引,我们可以在其中写入一个值。每个属性都必须有一个可访问性定义("公共"、"保护 "或 "私人"),我们将在后面解释每个设置的含义。如果你不知道在特定情况下选择哪种可访问性,那就填上 "public"。
实例 "的概念是最难理解的概念之一,所以你一定要仔细阅读下面几行,我建议你对所有的例子进行公平的尝试。
如果我们的应用程序已经在源代码中定义了一个类,那么它并没有真正用于任何地方,PHP也不知道它。这是因为OOP引入了 "数据封装原则",这意味着一个类有一个只在该类内部有效的内部(局部)环境。这是因为在无对象开发中,我们习惯于总是评估代码的整体性。另外,试着把一个类看成是某种形式的函数或外部调用的程序。
现在我们可以创建我们的第一个实例,使用newnew
操作符来完成。
$myArticle = new Article;$myArticle->title = '我的第一篇文章'; // 写入该值echo $myArticle->title; //列出 "我的第一篇文章"
注意,我们把由new
操作符创建的整个Article
对象放入$myArticle
变量中。这对我们来说意味着该对象实际上是一个 "数据类型",所以我们可以在变量之间移动它并继续使用它。
->
箭头操作符用于操作对象。如果我们有一个特定对象的实例(我们有一个包含其内容的变量),我们可以很容易地向内部属性写值,或读取它们,或使用方法(我们将在后面看到)以各种方式改变它们。
一个对象的实例是在内存中创建一个类的本地 "活 "副本(变量)。
正如我们已经讨论过的,每个对象都有一个适用于其内部的局部环境。由于这一原则,我们可以创建同一类别的许多独立实例,并自由地操纵它们。我们甚至可以创建一个动态数量的实例,例如,将它们存储为数组元素。这种可能性是无限的。
警告:
当创建极端数量的实例时(数百个或更多),请记住内存占用,因为 PHP 需要在 RAM 中保存所有实例的信息。然而,在实践中,由于许多实例而导致的内存溢出问题并没有发生。
例子。
$firstArticle = new Article;$firstArticle->title = '我的第一篇文章';$secondArticle = new Article;$secondArticle->title = '关于一只狗和一只猫';echo $firstArticle->title; //列出 "我的第一篇文章"echo $secondArticle->title; //写出了 "关于一只狗和一只猫"
注意,title'(
->title')属性的列表取决于我们从哪个实例读取。
我们已经展示了如何定义我们的第一个类,并创建一个它的实例(一个对象),我们已经把几个值写入其中。
在下一期,我们将解释构造器、方法和传递输入的概念。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | zh