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 开发的重要基础,掌握这些概念将帮助你编写更好的代码。