Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用标记接口的安全编程与Liskov替换原则_Php_Oop - Fatal编程技术网

Php 使用标记接口的安全编程与Liskov替换原则

Php 使用标记接口的安全编程与Liskov替换原则,php,oop,Php,Oop,我知道LSP以及以下代码给出的原因: PHP致命错误:声明 UnauthenticatedUser::executeCommand(UnauthenticatedCommand$c)必须为 与上/tmp/test.php中的User::executeCommand(命令$c)兼容 第13行 然而,我认为这两个接口Command和UnauthenticatedCommand是等价的(因为它们只是标记接口) 鉴于这些事实,有什么干净的[1]方法可以让未经身份验证的用户不可能执行除未经身份验证的命令以

我知道LSP以及以下代码给出的原因:

PHP致命错误:声明 UnauthenticatedUser::executeCommand(UnauthenticatedCommand$c)必须为 与上/tmp/test.php中的User::executeCommand(命令$c)兼容 第13行

然而,我认为这两个接口
Command
UnauthenticatedCommand
是等价的(因为它们只是标记接口)

鉴于这些事实,有什么干净的[1]方法可以让未经身份验证的用户不可能执行除
未经身份验证的命令以外的任何其他命令

<?php

interface Command {
}

interface UnauthenticatedCommand extends Command {
}

interface User {
    public function executeCommand(Command $c);
}

class UnauthenticatedUser implements User {
    public function executeCommand(UnauthenticatedCommand $c) {
    }
}

虽然您的推理不是特别不合理,但PHP并不支持这种推理。最好是在
命令
界面上提示,然后在方法体中添加一个额外的
instanceof
约束。@Sammitch如果能得到您的注释作为答案,对我们所有人都是非常好和有益的。假设PHP允许您在编写类时声明它们。
(新的未经身份验证的用户())->如何执行(新的InasceofCommand())
工作
InAsceofCommand
没有执行
Unauthenticated命令
@mleko它将抛出一个可丢弃的命令,并以紧急级别记录。@Flavius所以您希望它是
TypeError