问题标签 [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 投票
0 回答
97 浏览

php - PHP - 从父类调用静态方法

我有以下类层次结构:MDLUser继承自MDLPersistentObject

MDLPersistentObject我有一个返回数组的静态方法。在MDLUser我覆盖了静态方法,使其返回MDLPersistentObject' 数组,添加自己的数据,然后返回新数组。

但是当我parent::myArrayReturningMethod()在里面调用它时,MDLUser它只会返回MDLUser' 的实现(即缺少来自 的数组数据MDLPersistentObject。但是,如果我把它称为不好的做法MDLPersistentObject::myArrayReturningMethod(),那么它会返回我所期望的。

调用静态方法的父实现不是parent::正确的后期静态绑定方法吗?

如果您想知道我的代码是什么样的:

MDLPersistentObject 的方法:

MDLUser的方法:

0 投票
2 回答
114 浏览

java - 没有方法的静态绑定和动态绑定

我在大学里参加了面向对象编程的考试。其中一个问题是关于静态绑定和动态绑定。

问题如下:

是/否 在此处输入图像描述 ,顺便说一句,这不是我的答案。

我的老师说答案是“不”,因为它是静态绑定。

据我所知,静态绑定和动态绑定仅在我调用方法时发生。我阅读了有关此主题的所有 StackOverflow 问题和许多博客文章,我能想到的唯一答案是存在动态绑定

任何解释将不胜感激。

0 投票
2 回答
19656 浏览

php - 为什么要返回新的静态?(PHP)

为什么一些开发人员创建一种返回新静态的方法?有一个返回 new static的方法的原因是什么?我不是在问静态和自我之间有什么区别,或者静态和自我是什么意思。例如,这是一个简单的类:

如您所见,有一个静态方法make()返回new static。然后,一些开发人员调用其他方法,如下所示:

这样做的目的是什么?我看到这里我们不使用new Expression语法,如果这就是重点 - 那么为什么不将所有方法都设为静态呢?有什么区别,有一个返回新静态的方法(而其他方法不是静态的)的原因是什么?

0 投票
1 回答
753 浏览

php - Laravel 后期静态绑定为 static::whereIn

好的,我阅读并感觉我对方法和变量的PHP后期静态绑定有所了解。但是从Laravel 5 上这段代码的第 28 行开始,它使用 with whereInwhich 是 Laravel Collection 方法。我不明白这里发生了什么,static::whereIn()。集合在哪里,以便您可以使用whereIn()

0 投票
1 回答
38 浏览

php - 通过父类定义被调用的类属性

我编写了一个父类(使用后期静态绑定),从中继承了我的数据库类。我正在尝试编写一个构造函数来将每个表列分配为子类的公共属性。到目前为止,我可以在子类中编写构造函数,效果很好,但我想将它放在父类中,以便自动定义所有子类属性。这是我的孩子班:

要在父级中使用此构造函数,我需要能够定义被调用的类属性。

提前致谢。

0 投票
1 回答
83 浏览

php - 为什么我不能直接使用函数返回值作为 PHP 中的动态类名?

从 PHP 5.3 开始,可以使用变量作为类名,不仅用于对象实例化,甚至用于静态方法

但是,如果我尝试使用函数或方法的返回值而不是实际变量,则会出现错误:

另一方面,这很好用:

是什么赋予了?我刚刚在 PHP (5.6) 语法处理器中发现了一个错误吗?

0 投票
0 回答
20 浏览

php - 后期静态绑定按预期工作

这是我想使用的注册表代码。但static不能正常工作。在此示例中,它始终返回 2(而预期为 1)。会是什么?

0 投票
2 回答
55 浏览

php - 这两种 OOP 场景的区别?

我很困惑这两种情况之间的差异或性能增益。为什么会选择一个而不是另一个?

父类:

儿童A班

运行第一个示例:

第二个例子是:

儿童A班

运行第二个示例:

有人可以告诉我这两种情况之间的优点和/或缺点吗?我之所以有这些示例,是因为我不想重写父类的构造函数。

0 投票
0 回答
72 浏览

php - php后期静态绑定和'self'调用

我已经看过有关此的主题,并且我了解它的工作原理。但这不是很混乱吗?使用self::someMethod()我们打算停止多态行为,并且我们希望不再依赖于子类中可能的覆盖。但是这个例子(非常不自然,但仍然)表明这种期望会导致意想不到的错误。假设,我们有类层次结构 Shape->Rectangle->Square,并且还有其他东西有用于计算面积的静态方法:

这是因为虽然Rectangle::areaWithArgsNumberCheck只使用了 'self',但它调用了Shape::checkArgsNumber使用static::areaNumArgs. 最后一次调用被解析为Square类,因为self::调用转发了静态绑定。

这个问题很容易通过使用类名 ( Rectangle::) 而不是self::

所以对我来说,如果有一些 static调用,那么该类层次结构中的所有调用都应该static明确地使用类名。您只是永远不知道self::呼叫将被转发到哪里以及将使用哪些可能被覆盖的方法。我对此是否正确,或者在某些情况下,使用“self”转发静态绑定可能有用且安全?

0 投票
0 回答
44 浏览

php - 后期静态绑定问题

我在自己的项目中遇到了一些麻烦。我正在编写一个简单的考试系统,为了方便起见,我使用了后期静态绑定。我有下一个代码:

我的方法写在单独的文件中。此外,Router 类是 Controler 的子类,仅在包含文件方法的文件夹上有所不同。

我做 GET-query /login 和 class Routing 使用以下代码执行构建此页面:

我想在这里调用Controler 类静态方法。我的结果:

XDebug 跟踪:

如果我打电话给 View::{'message'} - 一切都会好的。(View 是 Controler 的子级)

现在我的问题是:当我调用父类的静态方法时,谁能解释为什么 PHP 执行子类的非静态方法?