Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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接口:指定任何可见性_Php_Oop_Interface_Abstract - Fatal编程技术网

PHP接口:指定任何可见性

PHP接口:指定任何可见性,php,oop,interface,abstract,Php,Oop,Interface,Abstract,我正在为一组类使用一个接口。但是,我有一个问题,因为我希望在接口中允许任何内容(即:public、protected和private) 我需要父方法只受保护,子方法是私有的,但我得到的错误是 致命错误:中必须省略接口方法Baz::qux()的访问类型。“ 我试着在界面Baz中指定其他可见性方法并删除public,但都失败了 有没有一种方法可以通过接口实现它?如果没有,那么有没有一种方法可以声明它abstract,我也尝试过,但失败了 interface Baz { public func

我正在为一组类使用一个接口。但是,我有一个问题,因为我希望在接口中允许任何内容(即:
public
protected
private

我需要父方法只受保护,子方法是私有的,但我得到的错误是

致命错误:中必须省略接口方法Baz::qux()的访问类型。“

我试着在界面
Baz
中指定其他可见性方法并删除
public
,但都失败了

有没有一种方法可以通过接口实现它?如果没有,那么有没有一种方法可以声明它
abstract
,我也尝试过,但失败了

interface Baz
{
    public function qux();
}

class Bar implements Baz
{
    protected function qux()
    {
        //do foo
    }
}

class Foo extends Bar implements Baz
{
    private function qux()
    {
        parent::qux();
    }
}
您在中声明的方法应该是公共的。您定义了一个带有接口的协定。任何非公共方法都将是实现详细信息,而这些方法不属于接口

来自维基百科:

接口编程

接口的使用允许一种称为接口编程的编程风格。其背后的思想是将编程逻辑建立在所用对象的接口上,而不是建立在内部实现细节上。接口编程减少了对实现细节的依赖,并使代码更具可重用性。[7]它使程序员能够稍后通过简单地将使用的对象与实现相同接口的另一个对象交换来更改系统的行为


接口是双方之间的合同,是双方沟通方式的协议


将方法设置为受保护或私有是没有意义的,因为另一方将看不到这些方法。

开发人员禁用了可见性,以便进行更流畅的重用。通过关键字
implements
您已经将接口绑定到类。如果不实现接口,您将无法访问该接口。

无论何时,只要您想要这通常强烈表明您的概念有问题。接口只是一个线框,所以您关心它的可见性。很抱歉,现在我知道了。感谢info all.PHP,当您将方法指定为
abstract
。例如:
abstract public function qux()
我有一个
\uu call()
方法,该方法使用前缀为的属性的相同名称调用受保护的方法。访问
$object->name
调用受保护的
$object->getName()
。在这种情况下,private或protected方法的接口可能有某种意义?我不确定。@IvanMontilla用于上述用途的接口没有意义,因为该接口旨在实现它的任何类的外部用途。如果您想强制以protected方法的形式执行一致的继承行为,可以使用abstr使用抽象方法来激活类,强制扩展该抽象类的所有类实现所述方法(只要这些类本身不是抽象的)。(这也是JvdBerg在这个问题上的意思。)“接口是一个契约”-说得够多了。+1