PHP 高手之路(三)

PHP 高手之路(三)是一篇较为深入的 PHP 语言技巧和实践文章,它包含了 PHP 领域的一些高级特性,例如:面向对象、设计模式、异常处理、事件管理等。本文假定你已经具备了 PHP 基础知识,并熟练掌握了 PHP 面向过程的编程实践。

PHP 高手之路(三)完整攻略

概述

PHP 高手之路(三)是一篇较为深入的 PHP 语言技巧和实践文章,它包含了 PHP 领域的一些高级特性,例如:面向对象、设计模式、异常处理、事件管理等。本文假定你已经具备了 PHP 基础知识,并熟练掌握了 PHP 面向过程的编程实践。

目录

  1. 面向对象
  2. 类的定义与实例化
  3. 属性和方法
  4. 继承
  5. 抽象类和接口
  6. 魔术方法
  7. 设计模式
  8. 工厂模式
  9. 单例模式
  10. 注册模式
  11. 策略模式
  12. 适配器模式
  13. 异常处理
  14. 异常的定义和抛出
  15. 异常的捕获和处理
  16. 事件管理
  17. 事件的定义和触发
  18. 事件的监听和处理

面向对象

类的定义与实例化

在 PHP 中定义类使用关键字 class,类名一般使用驼峰式命名。类中可以定义属性和方法,在实例化时需要用关键字 new

// 定义一个类
class Person {
    public $name;
    public $age;

    public function sayHello() {
        echo "Hello, I am " . $this->name;
    }
}

// 实例化并调用方法
$person = new Person();
$person->name = "Tom";
$person->sayHello();

属性和方法

类中的属性和方法可以使用关键字 publicprivateprotected 修饰,分别表示公开的、私有的和受保护的。私有属性和方法只能在类的内部访问,受保护的属性和方法可以在类的内部和子类中访问。

class Person {
    public $name;       // 公有属性
    protected $age;    // 受保护属性
    private $job;      // 私有属性

    public function sayHello() {
        echo "Hello, I am " . $this->name;
    }

    protected function getAge() {
        return $this->age;
    }

    private function getJob() {
        return $this->job;
    }
}

// 访问受保护属性和方法
class Student extends Person {
    public function showAge() {
        echo $this->getAge();
    }
}

$student = new Student();
$student->name = "Jerry";
$student->showAge();

继承

子类可以继承父类的属性和方法,通过 extends 关键字实现。在子类中可以重写父类的方法,使用 parent:: 调用父类的方法。

class Animal {
    public $name;

    public function move() {
        echo "moving...";
    }
}

class Dog extends Animal {
    public function bark() {
        echo "barking...";
    }

    public function move() {
        echo "running...";
        parent::move();
    }
}

// 实例化并调用方法
$dog = new Dog();
$dog->name = "小狗";
$dog->move();
$dog->bark();

抽象类和接口

抽象类是一种没有具体实现的类,只能被继承,子类必须实现抽象类中的方法。接口是一种只定义方法签名(包括参数和返回值),而没有具体实现的类。

abstract class Shape {
    abstract public function area();
}

interface Printable {
    public function print();
}

class Square extends Shape implements Printable {
    public $side;

    public function area() {
        return $this->side * $this->side;
    }

    public function print() {
        echo "The area of the square is " . $this->area();
    }
}

$square = new Square();
$square->side = 5;
$square->print();

魔术方法

魔术方法是一种特殊的方法,它们在类的对象被访问和修改时自动调用。

设计模式

异常处理

事件管理

本文标题为:PHP 高手之路(三)

基础教程推荐