gpt4 book ai didi

php - 接口(interface)常量,后期静态绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 10:57:52 24 4
gpt4 key购买 nike

interface PasswordBrokerContract
{
const PASSWORD_RESET = 'passwords.reset';

public function reset(array $credentials, Closure $callback);
}

class PasswordBroker implements PasswordBrokerContract
{
public function reset(array $credentials, Closure $callback)
{
// implementation

return static::PASSWORD_RESET;
}

}

使用 self 是否重要?或 static考虑到接口(interface)常量不能被继承它们的类/接口(interface)覆盖?

最佳答案

这可能很重要,因为即使您不能在实现接口(interface)的类中覆盖接口(interface)常量,您也可以在扩展最初实现接口(interface)的类的类中覆盖这些常量:

例如。以下:

<?php

interface Contract
{
const PASSWORD_RESET = 'passwords.reset';
public function reset(): void;
}


class A implements Contract
{
public function reset(): void
{
echo static::PASSWORD_RESET, "\n";
}
}

class B extends A {
const PASSWORD_RESET = 'foobar';
}

现在这个:
(new A())->reset();

将输出 passwords.reset .

但是这个:
(new B())->reset();

将输出 foobar .

但是如果你没有使用后期静态绑定(bind),而是使用了 self , 你会得到 passwords.reset每次。

看到它工作 here .

关于php - 接口(interface)常量,后期静态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59067186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com