问题标签 [late-static-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
43 浏览

php - PHP后期静态绑定(new static):如何保证子类构造函数兼容性和处理发散构造函数?

对于一些更复杂的类层次结构,我用一个最小的例子来解决这个问题。

给出了这个类 - 可以修改方法“createOrUpdate()”:

现在让我们看看如果我们扩展它会发生什么:

工作正常!

也可以正常工作,但是如果有人确实 createOrUpdate() 参数 $c 会默默地丢失!

错误:引发ArgumentCountError

错误:有效,但行为完全出乎意料。

现在我的问题是:我可以在内部使用一些反射createOrUpdate()来检查当前调用的子类是否正确地实现了构造函数?如果其他人可以在层次结构中实现更多子类,您将如何处理?

0 投票
1 回答
472 浏览

php - 接口常量,后期静态绑定

如果您使用selfstatic考虑接口常量不能被继承它们的类/接口覆盖,这有关系吗?

0 投票
1 回答
161 浏览

php - 如何使父类中的'self'引用PHP中的扩展类?

我正在使用 Wordpress,需要实例化一个类似于这个过于简化的示例的新类(对于add_action()接收一些参数的钩子):

self从扩展类调用时,我如何才能init()引用扩展类?我知道 PHP 文档中的后期静态绑定页面,但我不清楚如何在上述上下文中应用它。谢谢!

0 投票
1 回答
37 浏览

php - php可以调用静态别名吗?

在 php 中,父类中的方法是否可以在子类的实例中使用子类中的别名?

父类:

儿童班:

代码:

我希望这段代码返回一个新实例My\Custom\Path\To\Foo()而不是一个新实例Foo()

我意识到我可以将所需的 Foo 路径存储在类属性中,或者我可以简单地在子类中实例化所需的 Foo 。use但是,考虑到路径已经存储在子类的语句中,这两者似乎都是多余的。

0 投票
1 回答
31 浏览

php - 后期静态绑定中的对象静态属性

问题已解决,这是一个错误,请参阅https://github.com/docker-library/php/issues/133

真正奇怪的是,我一直在我的框架中使用它,但突然它停止了对这个特定示例的工作。

在执行这部分逻辑之前,它多次使用没有问题......不知道为什么这部分不起作用。

创建新实例

我得到 DailyCompetitionWinnersFactory 的实例,但它没有定义任何静态属性。

在此处输入图像描述

0 投票
2 回答
35 浏览

php - 如何确保子方法实例化子对象而不是父对象?

我有一个父类和一个子类,如下所示

当我调用方法Produit::findByNumeroDeSerie($table, $numeroDeSerie)时,

它实例化 aObjet而不是 a Produit,这意味着我无法访问Produit实例化对象的 getter 方法。

知道为什么吗?我是否需要在 Objet 的每个子类中重写findByNumeroDeSerie方法?

0 投票
2 回答
77 浏览

php - 通过引用分配静态属性在 PHP5 和 PHP7 之间的行为不同

从 PHP 5 升级到 PHP 7 后,以下代码产生了不同的结果:

在 PHP5 中:

在 PHP7 中:

我想要的输出是 PHP5 输出,因为我希望能够在扩展基(父)类的所有类中引用单个属性名称,但我不想重新声明该属性或在每一个中设置它的方法子类(主要是为了避免为几十个类添加相同的属性/方法的维护开销)。

似乎 PHP5 的魔力在于通过引用分配(在对 SO 进行大量搜索之后,有帮助的 回答者提到通过引用设置“破坏”了“引用集”,它允许每个子类中的属性保存单独的值)。我发现这是 PHP5 中一个非常优雅的解决方案。

有没有办法在 PHP7 中使用相同或相似的代码实现相同的结果?

解决方法:

看起来这是 PHP 7.2 和 7.3 之间发生重大变化的结果,并且可能没有类似优雅的两行替代方案。在重构我的代码之后,我发现这个稍微冗长的解决方法是有效的(并且满足了我不必在子类中重新声明属性的主要目标):