目录

  1. PHP 面向对象概述
  2. PHP 类和对象
  3. PHP 类的属性和方法
  4. PHP 构造函数和析构函数
  5. PHP 继承
  6. PHP 多态
  7. PHP 接口
  8. PHP 抽象类
  9. PHP 命名空间与面向对象
  10. 参考资料与出站链接

PHP 面向对象概述

面向对象编程 (OOP) 是一种编程范式,它将数据和操作这些数据的方法封装在对象中。PHP 支持面向对象编程,从 PHP 5 开始,PHP 引入了许多面向对象编程的特性,如类、继承、接口、抽象类等。这使得 PHP 成为一种功能更强大、可扩展的语言,适合开发大型的应用程序。


PHP 类和对象

定义类

类是对象的模板,它定义了对象的属性(数据)和方法(操作)。在 PHP 中,类通过 class 关键字定义。

<?php
class Car {
    public $make;
    public $model;
    public $year;

    public function __construct($make, $model, $year) {
        $this->make = $make;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "This is a $this->year $this->make $this->model.";
    }
}
?>

上面定义了一个 Car 类,包含三个属性:$make$model$year,以及一个方法 displayInfo() 用于显示汽车信息。

创建对象

对象是类的实例,通过 new 关键字来实例化类。

<?php
$car = new Car("Toyota", "Corolla", 2022);
$car->displayInfo();  // 输出:This is a 2022 Toyota Corolla.
?>


PHP 类的属性和方法

属性

类中的属性用于保存对象的状态,它们定义了对象的数据。

class Person {
    public $name;
    public $age;
    
    // 构造函数用于初始化属性
    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

方法

方法是属于类的函数,用来操作类的属性,或者实现类的行为。

class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function introduce() {
        echo "Hi, I am $this->name, and I am $this->age years old.";
    }
}

$person = new Person("John", 25);
$person->introduce();  // 输出:Hi, I am John, and I am 25 years old.


PHP 构造函数和析构函数

构造函数

构造函数是一个特殊的函数,在创建对象时自动调用,通常用于初始化对象的属性。

<?php
class Book {
    public $title;
    public $author;

    // 构造函数
    public function __construct($title, $author) {
        $this->title = $title;
        $this->author = $author;
    }
}

$book = new Book("PHP for Beginners", "John Doe");
echo $book->title;  // 输出:PHP for Beginners
?>

析构函数

析构函数也是一个特殊的函数,当对象被销毁时自动调用,通常用于清理资源。

<?php
class DatabaseConnection {
    public function __construct() {
        echo "Connection established.\n";
    }

    public function __destruct() {
        echo "Connection closed.\n";
    }
}

$db = new DatabaseConnection();  // 输出:Connection established.
unset($db);  // 输出:Connection closed.
?>


PHP 继承

继承允许一个类继承另一个类的属性和方法。子类可以访问父类的公共和保护方法和属性,也可以重写父类的方法。

<?php
class Animal {
    public function speak() {
        echo "Animal speaks";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Dog barks";
    }
}

$dog = new Dog();
$dog->speak();  // 输出:Dog barks
?>

在这个例子中,Dog 类继承了 Animal 类,并重写了 speak() 方法。


PHP 多态

多态允许不同类的对象以相同的接口执行不同的操作。通过继承和接口,可以实现多态。

<?php
class Cat extends Animal {
    public function speak() {
        echo "Cat meows";
    }
}

function animalSpeak(Animal $animal) {
    $animal->speak();
}

$dog = new Dog();
$cat = new Cat();

animalSpeak($dog);  // 输出:Dog barks
animalSpeak($cat);  // 输出:Cat meows
?>

在这里,animalSpeak 函数接受 Animal 类型的对象作为参数,但我们传入了 DogCat 类型的对象,表现出多态性。


PHP 接口

接口是一个类的模板,它定义了一组方法,这些方法在实现接口的类中必须被实现。接口不能包含属性和实现的方法,只能定义方法签名。

<?php
interface Vehicle {
    public function start();
    public function stop();
}

class Car implements Vehicle {
    public function start() {
        echo "Car is starting\n";
    }

    public function stop() {
        echo "Car is stopping\n";
    }
}

$car = new Car();
$car->start();  // 输出:Car is starting
$car->stop();   // 输出:Car is stopping
?>

在这个例子中,Car 类实现了 Vehicle 接口,必须定义 start()stop() 方法。


PHP 抽象类

抽象类是不能直接实例化的类,它通常包含抽象方法(没有实现的方法)。子类必须实现这些抽象方法。

<?php
abstract class Animal {
    abstract public function makeSound();
}

class Dog extends Animal {
    public function makeSound() {
        echo "Bark";
    }
}

$dog = new Dog();
$dog->makeSound();  // 输出:Bark
?>

在这个例子中,Animal 类是一个抽象类,包含一个抽象方法 makeSound()Dog 类继承并实现了该方法。


PHP 命名空间与面向对象

命名空间和面向对象可以很好地结合使用,确保在大型项目中类不会发生冲突。

<?php
namespace Vehicle;

class Car {
    public function drive() {
        echo "Car is driving";
    }
}

namespace Animal;

class Dog {
    public function bark() {
        echo "Dog is barking";
    }
}
?>

通过命名空间,我们可以确保即使 CarDog 类具有相同的名称,也不会发生冲突。


参考资料与出站链接


面向对象编程是现代编程的主要范式之一,PHP 的面向对象支持使得开发者能够创建结构良好、可维护的代码。通过合理使用类、对象、继承、多态、接口等概念,可以提升代码的复用性和扩展性。