类的定义与实例化
在PHP中定义一个类是通过关键字class
实现的,类可包含属性(变量)和方法(函数)。
class Product {
// 定义属性
public $name;
public $price;
// 定义方法
public function __construct($name, $price) {
$this->name = $name;
$this->price = $price;
}
public function getInfo() {
return $this->name . " costs $" . $this->price;
}
}
// 实例化对象
$product = new Product("Coffee", 5);
echo $product->getInfo(); // 输出: Coffee costs $5
这个简单的类Product
包含了两个属性和一个构造函数,以及用于获取信息的方法。
继承(Inheritance)
继承允许我们创建一个类(子类)来继承另一个类(父类)的属性和方法。通过继承,我们可以扩展现有的类。
class Beverage extends Product {
public $temperature;
public function __construct($name, $price, $temperature) {
parent::__construct($name, $price);
$this->temperature = $temperature;
}
public function getInfo() {
return parent::getInfo() . " at " . $this->temperature . " degree";
}
}
// 实例化Beverage对象
$coffee = new Beverage("Coffee", 5, "hot");
echo $coffee->getInfo(); // 输出: Coffee costs $5 at hot degree
这里,Beverage
继承了Product
,并添加了新的属性temperature
以及覆盖了getInfo
方法。
接口(Interface)
接口定义了一组方法规范,但不实现它们。实现接口的类必须实现接口中定义的所有方法。
interface Payable {
public function pay();
}
class OnlinePayment implements Payable {
public function pay() {
echo "Paying online";
}
}
// 实例化OnlinePayment
$payment = new OnlinePayment();
$payment->pay(); // 输出: Paying online
抽象类(Abstract Class)
抽象类不能被实例化,通常用作基类。抽象类中可以包含抽象方法和具体方法。
abstract class Animal {
abstract function makeSound();
public function sleep() {
echo "Sleeping";
}
}
class Dog extends Animal {
public function makeSound() {
echo "Bark";
}
}
$myDog = new Dog();
$myDog->makeSound(); // 输出: Bark
$myDog->sleep(); // 输出: Sleeping
特质(Traits)
特质是一种为类提供方法的方式,它提供了一种代码复用机制,而无需从类继承。
trait Logger {
public function log($message) {
echo "Log message: $message";
}
}
class FileLogger {
use Logger;
}
$fileLogger = new FileLogger();
$fileLogger->log("Testing"); // 输出: Log message: Testing
匿名类
匿名类允许即时定义和实例化一个类,适用于一次性使用的简单对象。
$greeting = new class {
public function sayHello() {
echo "Hello, World!";
}
};
$greeting->sayHello(); // 输出: Hello, World!
通过以上各个案例,我们可以看到PHP面向对象编程的灵活性和强大功能。从类的基本概念到继承、接口、抽象类,再到特质和匿名类,PHP的OOP特性为开发者提供了丰富的工具来构建模块化和高效的应用程序。逐步学习这些概念,并通过实际案例加以实践,可以让你更加深入地掌握PHP的面向对象编程。