PHP 面向对象编程
PHP 面向对象编程
面向对象编程(OOP)是一种程序设计范式,它使用对象来组织代码。PHP 从版本 5 开始提供了完整的面向对象编程支持。本章将介绍 PHP 面向对象编程的核心概念和使用方法。
类与对象
类的定义
class Person {
// 属性
public $name;
private $age;
protected $gender;
// 构造函数
public function __construct($name, $age, $gender) {
$this->name = $name;
$this->age = $age;
$this->gender = $gender;
}
// 方法
public function sayHello() {
return "你好,我是{$this->name},今年{$this->age}岁。";
}
}
创建对象
$person = new Person("张三", 25, "男");
echo $person->sayHello(); // 输出:你好,我是张三,今年25岁。
访问控制
访问修饰符
- public: 可以从任何地方访问
- private: 只能从类内部访问
- protected: 只能从类内部和子类访问
class Student {
public $name; // 公开
private $score; // 私有
protected $grade; // 受保护
public function setScore($score) {
$this->score = $score; // 可以访问私有属性
}
public function getScore() {
return $this->score;
}
}
继承
基本继承
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function makeSound() {
return "动物发出声音";
}
}
class Dog extends Animal {
public function makeSound() {
return "汪汪汪!";
}
}
$dog = new Dog("旺财");
echo $dog->makeSound(); // 输出:汪汪汪!
接口
定义和实现接口
interface Movable {
public function move();
public function stop();
}
class Car implements Movable {
public function move() {
return "汽车开始行驶";
}
public function stop() {
return "汽车停止";
}
}
抽象类
抽象类定义
abstract class Shape {
protected $color;
public function __construct($color) {
$this->color = $color;
}
// 抽象方法
abstract public function getArea();
}
class Circle extends Shape {
private $radius;
public function __construct($color, $radius) {
parent::__construct($color);
$this->radius = $radius;
}
public function getArea() {
return pi() * $this->radius * $this->radius;
}
}
静态成员
静态属性和方法
class MathHelper {
public static $pi = 3.14159;
public static function square($number) {
return $number * $number;
}
}
// 使用静态成员
echo MathHelper::$pi; // 访问静态属性
echo MathHelper::square(4); // 调用静态方法
魔术方法
常用魔术方法
class Product {
private $data = [];
// 设置属性
public function __set($name, $value) {
$this->data[$name] = $value;
}
// 获取属性
public function __get($name) {
return $this->data[$name] ?? null;
}
// 检查属性是否存在
public function __isset($name) {
return isset($this->data[$name]);
}
// 删除属性
public function __unset($name) {
unset($this->data[$name]);
}
}
命名空间
定义和使用命名空间
namespace App\Models;
class User {
// 类定义
}
// 在其他文件中使用
use App\Models\User;
$user = new User();
实践练习
- 创建一个银行账户类,包含存款、取款和查询余额的方法。
- 实现一个简单的商品库存系统,使用继承来处理不同类型的商品。
- 设计一个图形类的继承体系,包括圆形、矩形和三角形。
- 使用接口实现一个简单的日志系统,支持文件日志和数据库日志。
通过这些练习,你将加深对面向对象编程概念的理解,学会如何在实际项目中应用这些知识。面向对象编程是现代 PHP 开发的重要基础,掌握这些概念将帮助你编写更好的代码。