我正在尝试创建一个调用另一个文件中的函数的 PHP 文件。一些示例代码:
接口代码:
interface AJAXDispatcher {
static function dispatch($action);
}
Run Code Online (Sandbox Code Playgroud)
执行:
class myAJAX implements AJAXDispatcher {
static function dispatch($action) {
if ($action === "action1") {
do_something();
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎没问题。我尝试通过首先导入它所在的文件来调用它。我试图使其独立于类的名称,以便我可以执行如下操作:
AJAXDispatcher::dispatch($action);
Run Code Online (Sandbox Code Playgroud)
认为这会起作用,因为 myAJAX 将从 AJAXDispatcher 继承,但我收到以下错误:
Fatal error: Cannot call abstract method AJAXDispatcher::dispatch() in ....
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?
具有静态方法的接口没有任何意义,因为要调用静态方法,您(通常)需要知道类名。
相反,您应该使该方法成为非静态的并在某处创建 myAJAX 的实例。调用 AJAXDispatcher 的代码接收实例并调用它。您可以使用类型提示来确保获得正确的实例。
interface AJAXDispatcher {
public function dispatch($action);
}
class myAJAX implements AJAXDispatcher {
public function dispatch($action) {
do_something();
}
}
class Controller {
private $dispatcher;
public function __construct(AJAXDispatcher $dispatcher) {
$this->dispatcher = $dispatcher;
}
public function action($action) {
$this->dispatcher->dispatch($action);
}
}
$dispatcher = new myAJAX();
$controller = new Controller($dispatcher);
$controller->action('index');
Run Code Online (Sandbox Code Playgroud)
此示例使用依赖注入设计模式。
| 归档时间: |
|
| 查看次数: |
4015 次 |
| 最近记录: |