1.6 高级用法 #
组合优于继承 #
在一些情况下,组合(Composition)可以比继承更为灵活和可维护。你可以通过在类中包含另一个类(作为属性)来实现功能复用,而不是通过继承。这种方式减少了类之间的耦合度。
class A {
public function methodA() {
echo "Method A";
}
}
class B {
public function methodB() {
echo "Method B";
}
}
class C {
private $a;
private $b;
public function __construct() {
$this->a = new A();
$this->b = new B();
}
public function methodA() {
$this->a->methodA();
}
public function methodB() {
$this->b->methodB();
}
}
$c = new C();
$c->methodA();
$c->methodB();
trait 方法冲突 #
当多个 Trait 的方法名相同时,可以使用 insteadof 和 as 关键字来解决冲突。
trait Logger {
public function log($message) {
echo "Log: " . $message;
}
}
trait FileLogger {
public function log($message) {
echo "FileLog: " . $message;
}
}
class User {
use Logger, FileLogger {
Logger::log insteadof FileLogger; // 使用 Logger 的 log 方法
FileLogger::log as fileLog; // 为 FileLogger 的 log 方法起个别名
}
}
$user = new User();
$user->log("Test"); // 输出 "Log: Test"
$user->fileLog("Test"); // 输出 "FileLog: Test"