禁止除接口方法之外的任何方法

时间:2016-11-30 12:16:35

标签: php

我想禁止类中的任何其他方法,除了通过接口实现的方法。

样本:


    interface Helper_Interface_AdminSinglePage {

    public function action_index();

    /**
     * AJAX save
     * @return mixed
     */
    public function action_save();

    /**
     * AJAX delete
     * @return mixed
     */
    public function action_delete();
}

您有任何想法,甚至可能解决方案吗? 我可以自己解决,只需要一些建议。

1 个答案:

答案 0 :(得分:1)

你不想要一个界面。您需要一个带有该api的final类,客户端将该行为作为您的类可以调用的回调传递。类似的东西:

final class AdminSinglePage
{
    private $index;
    private $save;
    private $delete;

    public function __construct(Closure $index, Closure $save, Closure $delete)
    {
        $this->index = $index;
        $this->save = $save;
        $this->delete = $delete;
    }

    public function action_index()
    {
        call_user_func_array($this->save, []);
    }

    public function action_save()
    {
        call_user_func_array($this->save, []);
    }

    public function action_delete()
    {
        call_user_func_array($this->delete, []);
    }
}

可以像这样实例化:

$page = new AdminSinglePage(function() {
    echo 'index page';
}, function() {
    echo 'save page';
}, function() {
    echo 'delete page';
});

// use it
$page->action_save();