8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

PHP 接口:指定任何可见性

Maxim Danilov 1月前

25 0

我正在使用一组类的接口。但是我遇到了一个问题,因为我希望接口中允许任何可见性(即:公共、受保护和私有)。我需要...

我正在使用一组类的接口。但是我遇到了一个问题,因为我希望 visibility 可见性 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();
    }
}
帖子版权声明 1、本帖标题:PHP 接口:指定任何可见性
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Maxim Danilov在本站《oop》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 接口 中声明的方法 应该是公共的。您定义了与接口的契约。任何非公共方法都是实现细节,它们不属于接口。顾名思义,实现细节应该放在 实现 接口的具体类中。

    来自维基百科:

    接口编程

    使用接口可以实现一种称为面向接口编程的编程风格。这种风格背后的理念是将编程逻辑建立在所用对象的接口上,而不是内部实现细节上。面向接口编程减少了对实现细节的依赖,使代码更具可重用性。[7] 它使程序员能够在以后更改系统的行为,只需将使用的对象与实现相同接口的另一个对象交换即可。

  • 我有一个 __call() 方法,该方法调用具有前缀的属性名称相同的受保护方法。访问 $object->name 会调用受保护的 $object->getName()。在这种情况下,私有或受保护方法的接口可能有意义吗?我不确定。

  • @IvanMontilla 为上述用途创建接口是没有意义的,因为接口旨在供任何实现它的类外部使用。如果您想以受保护方法的形式强制实现一致的继承行为,可以使用带有抽象方法的抽象类,强制所有扩展该抽象类的类实现该方法(只要这些类本身不是抽象的)。(这也是 JvdBerg 回答这个问题的意思。)

  • 接口是双方之间的契约,是双方沟通方式的协议。

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

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

返回
作者最近主题: