问题标签 [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.
php - PHP后期静态绑定(new static):如何保证子类构造函数兼容性和处理发散构造函数?
对于一些更复杂的类层次结构,我用一个最小的例子来解决这个问题。
给出了这个类 - 可以修改方法“createOrUpdate()”:
现在让我们看看如果我们扩展它会发生什么:
工作正常!
也可以正常工作,但是如果有人确实 createOrUpdate() 参数 $c 会默默地丢失!
错误:引发ArgumentCountError
错误:有效,但行为完全出乎意料。
现在我的问题是:我可以在内部使用一些反射createOrUpdate()
来检查当前调用的子类是否正确地实现了构造函数?如果其他人可以在层次结构中实现更多子类,您将如何处理?
php - 接口常量,后期静态绑定
如果您使用self
或static
考虑接口常量不能被继承它们的类/接口覆盖,这有关系吗?
php - 如何使父类中的'self'引用PHP中的扩展类?
我正在使用 Wordpress,需要实例化一个类似于这个过于简化的示例的新类(对于add_action()
接收一些参数的钩子):
self
从扩展类调用时,我如何才能init()
引用扩展类?我知道 PHP 文档中的后期静态绑定页面,但我不清楚如何在上述上下文中应用它。谢谢!
php - php可以调用静态别名吗?
在 php 中,父类中的方法是否可以在子类的实例中使用子类中的别名?
父类:
儿童班:
代码:
我希望这段代码返回一个新实例My\Custom\Path\To\Foo()
而不是一个新实例Foo()
。
我意识到我可以将所需的 Foo 路径存储在类属性中,或者我可以简单地在子类中实例化所需的 Foo 。use
但是,考虑到路径已经存储在子类的语句中,这两者似乎都是多余的。
php - 后期静态绑定中的对象静态属性
问题已解决,这是一个错误,请参阅https://github.com/docker-library/php/issues/133
真正奇怪的是,我一直在我的框架中使用它,但突然它停止了对这个特定示例的工作。
在执行这部分逻辑之前,它多次使用没有问题......不知道为什么这部分不起作用。
创建新实例
我得到 DailyCompetitionWinnersFactory 的实例,但它没有定义任何静态属性。
php - 如何确保子方法实例化子对象而不是父对象?
我有一个父类和一个子类,如下所示
当我调用方法Produit::findByNumeroDeSerie($table, $numeroDeSerie)
时,
它实例化 aObjet
而不是 a Produit
,这意味着我无法访问Produit
实例化对象的 getter 方法。
知道为什么吗?我是否需要在 Objet 的每个子类中重写findByNumeroDeSerie方法?
php - 通过引用分配静态属性在 PHP5 和 PHP7 之间的行为不同
从 PHP 5 升级到 PHP 7 后,以下代码产生了不同的结果:
在 PHP5 中:
在 PHP7 中:
我想要的输出是 PHP5 输出,因为我希望能够在扩展基(父)类的所有类中引用单个属性名称,但我不想重新声明该属性或在每一个中设置它的方法子类(主要是为了避免为几十个类添加相同的属性/方法的维护开销)。
似乎 PHP5 的魔力在于通过引用分配(在对 SO 进行大量搜索之后,有帮助的 回答者提到通过引用设置“破坏”了“引用集”,它允许每个子类中的属性保存单独的值)。我发现这是 PHP5 中一个非常优雅的解决方案。
有没有办法在 PHP7 中使用相同或相似的代码实现相同的结果?
解决方法:
看起来这是 PHP 7.2 和 7.3 之间发生重大变化的结果,并且可能没有类似优雅的两行替代方案。在重构我的代码之后,我发现这个稍微冗长的解决方法是有效的(并且满足了我不必在子类中重新声明属性的主要目标):