php实现委托
PHP 实现委托模式的方法
委托模式(Delegate Pattern)是一种设计模式,允许对象将部分职责委托给另一个对象处理。在 PHP 中可以通过以下几种方式实现:
使用匿名函数或闭包
PHP 的闭包(Closure)可以方便地实现委托功能:
$delegate = function($param) {
return "处理参数: " . $param;
};
$result = $delegate("test");
echo $result; // 输出: 处理参数: test
通过对象方法实现
定义一个委托类,将方法作为回调:
class DelegateHandler {
public function handle($param) {
return "处理: " . $param;
}
}
$handler = new DelegateHandler();
$delegate = [$handler, 'handle'];
echo $delegate("data"); // 输出: 处理: data
使用 __invoke 魔术方法
通过实现 __invoke 使对象可调用:
class InvokableDelegate {
public function __invoke($param) {
return "调用处理: " . $param;
}
}
$delegate = new InvokableDelegate();
echo $delegate("value"); // 输出: 调用处理: value
类型提示与接口约束
通过接口规范委托行为:
interface TaskDelegate {
public function execute($input);
}
class ConcreteDelegate implements TaskDelegate {
public function execute($input) {
return "执行: " . $input;
}
}
function runTask(TaskDelegate $delegate, $data) {
return $delegate->execute($data);
}
$delegate = new ConcreteDelegate();
echo runTask($delegate, "task"); // 输出: 执行: task
动态委托调用
使用 call_user_func 进行灵活调用:
function process($callback, $data) {
return call_user_func($callback, $data);
}
echo process(function($v) { return strtoupper($v); }, "text"); // 输出: TEXT
注意事项
- 闭包方式适合简单逻辑,对象方式更适合复杂业务
- 类型提示可以增强代码的健壮性
- __invoke 方式使对象可以像函数一样调用
- 委托模式常用于事件处理、中间件等场景







