【php快速上手(九)】

server/2024/10/21 14:32:39/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

目录

  • PHP快速上手(九)
    • PHP 面向对象
      • 1. 类和对象
      • 2. 访问控制修饰符
      • 3. 构造函数和析构函数
      • 4. 继承和多态
      • 5. 接口和抽象类
      • 6. 特性(Trait)
      • 7. 静态属性和方法
    • PHP EOF
      • 1.Heredoc 语法
      • 2.Nowdoc 语法

PHP快速上手(九)

PHP 面向对象

PHP 的面向对象编程(OOP)是一种编程范式,它将代码组织成对象,每个对象都具有属性(属性)和行为(方法)。PHP 支持完整的面向对象编程特性,包括类、继承、多态、封装、接口、抽象类、特性等。下面详细讲解 PHP 中面向对象编程的核心概念和特性:

1. 类和对象

在面向对象编程中,类是一个模板,用于定义对象的属性和方法。对象是类的实例,每个对象都具有类中定义的属性和方法。

定义类

php">class Person {// 属性public $name;public $age;// 方法public function introduce() {echo "My name is " . $this->name . " and I am " . $this->age . " years old.";}
}

在上面的示例中,我们定义了一个名为 Person 的类,包含两个属性 name 和 age,以及一个方法 introduce()。

创建对象

php">// 创建对象
$person = new Person();
$person->name = "Alice";
$person->age = 30;// 调用对象的方法
$person->introduce();
// 输出: My name is Alice and I am 30 years old.

2. 访问控制修饰符

PHP 支持三种访问控制修饰符,用于控制类中属性和方法的访问权限:

  • public: 公有属性或方法,可以在类的内部、外部以及继承的子类中访问。
  • protected: 受保护属性或方法,只能在类的内部和继承的子类中访问。
  • private: 私有属性或方法,只能在类的内部访问,子类无法访问。
    示例
php">class Car {public $make; // 公有属性protected $model; // 受保护属性private $year; // 私有属性public function setYear($year) {$this->year = $year;}public function getYear() {return $this->year;}
}

3. 构造函数和析构函数

  • 构造函数:在类的实例化过程中自动调用。可以用来初始化对象的属性。
  • 析构函数:在对象销毁之前自动调用。可以用来释放资源。
    示例
php">class Animal {public $name;public function __construct($name) {$this->name = $name;echo "An animal named " . $this->name . " was created.\n";}public function __destruct() {echo "An animal named " . $this->name . " was destroyed.\n";}
}$dog = new Animal("Dog");
// 输出: An animal named Dog was created.unset($dog);
// 输出: An animal named Dog was destroyed.

4. 继承和多态

继承:子类可以继承父类的属性和方法。子类可以重写父类的方法,并添加自己的属性和方法。
多态:通过重写父类的方法,子类可以表现出不同的行为。
示例

php">class Animal {public function speak() {echo "The animal makes a sound.\n";}
}class Dog extends Animal {public function speak() {echo "The dog barks.\n";}
}$animal = new Animal();
$animal->speak(); // 输出: The animal makes a sound.$dog = new Dog();
$dog->speak(); // 输出: The dog barks.

5. 接口和抽象类

  • 接口:定义一组方法的契约,类可以实现接口中的方法。接口不包含方法的实现。
  • 抽象类:包含一个或多个抽象方法的类。抽象方法没有方法体。子类必须实现所有抽象方法。
    示例:接口
php">interface Animal {public function speak();
}class Dog implements Animal {public function speak() {echo "The dog barks.\n";}
}

示例:抽象类

php">abstract class Animal {abstract public function speak();
}class Dog extends Animal {public function speak() {echo "The dog barks.\n";}
}$dog = new Dog();
$dog->speak(); // 输出: The dog barks.

6. 特性(Trait)

PHP 支持特性,它是一种代码复用的机制,可以将一组方法定义在特性中,并在类中使用。

示例

php">trait SayHello {public function sayHello() {echo "Hello!\n";}
}class Greeter {use SayHello;
}$greeter = new Greeter();
$greeter->sayHello(); // 输出: Hello!

7. 静态属性和方法

类中的属性和方法可以声明为静态(static),以便不需要实例化对象即可访问。

示例

php">class Math {public static $pi = 3.14;public static function add($a, $b) {return $a + $b;}
}echo Math::$pi; // 输出: 3.14
echo Math::add(3, 4); // 输出: 7

这些是 PHP 中面向对象编程的核心概念和特性。通过面向对象编程,你可以将代码组织成模块化的对象,使代码更易于维护和扩展。

PHP EOF

在 PHP 中,EOF(End of File)标记常用于定界符语法(delimiter syntax)中的一种特殊形式,用来创建多行字符串。这种语法称为Here Document或Heredoc语法。

1.Heredoc 语法

Heredoc 语法允许你定义一个多行字符串,字符串的内容可以包括换行符、变量和转义序列。Heredoc 语法的特点是使用一个标记来表示字符串的开始和结束。标记必须是一个合法的标识符(不包含空格或特殊字符),并且该标识符必须独立于一行。

Heredoc 语法的格式

php"><<<标记
多行字符串内容...
标记;

在上面的格式中,<<<标记表示字符串的开始,而标记;表示字符串的结束。标记的名称可以是任意合法的标识符,只要它在开头和结尾保持一致。字符串内容在标记之间。

示例

php">$message = <<<MSG
Hello, this is a multi-line message.
You can include variables like: \$name = "Alice".
This is useful for creating templates or long texts.
MSG;echo $message;

在上面的示例中,定义了一个名为 $message 的多行字符串,内容从 <<<MSG 到 MSG; 之间。在多行字符串中,你可以包含变量、特殊字符和转义序列。

2.Nowdoc 语法

Nowdoc 语法是 Heredoc 语法的一个变种,用于表示一个纯文本字符串。在 Nowdoc 语法中,不会解析字符串中的变量和转义序列。

Nowdoc 语法的格式

php"><<<'标记'
多行纯文本内容...
标记;

与 Heredoc 语法类似,Nowdoc 语法使用标记来表示字符串的开始和结束,但开头标记周围需要单引号 '。这表示字符串内容是纯文本,不会进行变量替换或转义序列处理。

示例

php">$message = <<<'MSG'
Hello, this is a multi-line pure text message.
You cannot include variables like: $name = "Alice".
This is useful for creating plain text content.
MSG;echo $message;

在上面的示例中,定义了一个名为 $message 的多行纯文本字符串,内容从 <<<‘MSG’ 到 MSG; 之间。由于是 Nowdoc 语法,所以字符串中的变量 $name 不会被解析。


http://www.ppmy.cn/server/10948.html

相关文章

Vue3基本功能介绍

文章目录 Vue3组件中的模板结构可以没有根标签div组合式APIRefReactive函数回顾Vue2响应式Vue3实现响应式对比reactive和refSetup注意点计算属性与监听computedWatchWatchEffectVue3生命周期自定义hook函数toRef其他组合APIshallowReactiveshallowRefreadonly和shallowOnlyToRa…

电脑怎么拖动文件到想要的位置?电脑上拖拽没了的文件怎么找回

在日常的办公和学习中&#xff0c;电脑文件拖拽操作是每位用户都不可或缺的技能。然而&#xff0c;有时在拖动文件时&#xff0c;可能会因为误操作或其他原因&#xff0c;导致文件消失或移至未知位置。本文将详细解析如何在电脑上轻松拖动文件到指定位置&#xff0c;并为您提供…

【verilog 设计】 reg有没有必要全部赋初值?

一、前言 在知乎发现“reg有没有必要全部赋初值”这个问题&#xff0c;与自己近期对Verilog reg的进一步学习相契合&#xff0c;此文对这个问题进行总结。 二、reg的初值赋值方式 就语法意义赋初值而言&#xff0c;就是在声明reg时对其赋值。在工程中&#xff0c;对于数字系…

XiaodiSec day022 Learn Note 小迪安全学习笔记

XiaodiSec day022 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 day22 主要内容 原生 js 款该 前端验证&未授权 开始 js 中也存在变量和函数&#xff0c;在浏览器中可以直接从浏览器中解析出&#xff0c;相当于白盒 而在之前的类似于 java 或 P…

数据结构之顺序表的实现(C语言版)

Hello, 大家好&#xff0c;我是一代&#xff0c;今天给大家带来有关顺序表的有关知识 所属专栏&#xff1a;数据结构 创作不易&#xff0c;望得到各位佬们的互三呦 一.前言 1.首先在讲顺序表之前我们先来了解什么是数据结构 数据结构是由“数据”和“结构”两词组合⽽来。 什…

295. 数据流的中位数

295. 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类:MedianFinder() 初始…

C++list类(个人笔记)

list类 1.熟悉list接口以及使用1.1list的构造1.2list iterator的使用1.3list capacity1.4list element access1.5list modifiers1.6list的迭代器失效 2.list的模拟实现 1.熟悉list接口以及使用 list的C官方文档 1.1list的构造 构造函数 constructor接口说明list (size_type …

Mint Ubuntu 使用 docker compose 创建容器

1.安装 docker docker-compose sudo apt install docker.io sudo apt-get install docker-compose sudo usermod -aG docker $USER sudo systemctl daemon-reload sudo systemctl restart docker 2.配置国内 docker 镜像源 修改/etc/docker/daemon.json&#xff0c;增加或者…