问题标签 [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 - 从父类调用静态方法
我有以下类层次结构:MDLUser
继承自MDLPersistentObject
在MDLPersistentObject
我有一个返回数组的静态方法。在MDLUser
我覆盖了静态方法,使其返回MDLPersistentObject
' 数组,添加自己的数据,然后返回新数组。
但是当我parent::myArrayReturningMethod()
在里面调用它时,MDLUser
它只会返回MDLUser
' 的实现(即缺少来自 的数组数据MDLPersistentObject
。但是,如果我把它称为不好的做法MDLPersistentObject::myArrayReturningMethod()
,那么它会返回我所期望的。
调用静态方法的父实现不是parent::
正确的后期静态绑定方法吗?
如果您想知道我的代码是什么样的:
MDLPersistentObject 的方法:
MDLUser的方法:
php - 为什么要返回新的静态?(PHP)
为什么一些开发人员创建一种返回新静态的方法?有一个返回 new static的方法的原因是什么?我不是在问静态和自我之间有什么区别,或者静态和自我是什么意思。例如,这是一个简单的类:
如您所见,有一个静态方法make()返回new static。然后,一些开发人员调用其他方法,如下所示:
这样做的目的是什么?我看到这里我们不使用new Expression语法,如果这就是重点 - 那么为什么不将所有方法都设为静态呢?有什么区别,有一个返回新静态的方法(而其他方法不是静态的)的原因是什么?
php - Laravel 后期静态绑定为 static::whereIn
好的,我阅读并感觉我对方法和变量的PHP后期静态绑定有所了解。但是从Laravel 5 上这段代码的第 28 行开始,它使用 with whereIn
which 是 Laravel Collection 方法。我不明白这里发生了什么,static::whereIn()
。集合在哪里,以便您可以使用whereIn()
。
php - 通过父类定义被调用的类属性
我编写了一个父类(使用后期静态绑定),从中继承了我的数据库类。我正在尝试编写一个构造函数来将每个表列分配为子类的公共属性。到目前为止,我可以在子类中编写构造函数,效果很好,但我想将它放在父类中,以便自动定义所有子类属性。这是我的孩子班:
要在父级中使用此构造函数,我需要能够定义被调用的类属性。
提前致谢。
php - 为什么我不能直接使用函数返回值作为 PHP 中的动态类名?
从 PHP 5.3 开始,可以使用变量作为类名,不仅用于对象实例化,甚至用于静态方法:
但是,如果我尝试使用函数或方法的返回值而不是实际变量,则会出现错误:
另一方面,这很好用:
是什么赋予了?我刚刚在 PHP (5.6) 语法处理器中发现了一个错误吗?
php - 后期静态绑定按预期工作
这是我想使用的注册表代码。但static
不能正常工作。在此示例中,它始终返回 2(而预期为 1)。会是什么?
php - 这两种 OOP 场景的区别?
我很困惑这两种情况之间的差异或性能增益。为什么会选择一个而不是另一个?
父类:
儿童A班
运行第一个示例:
第二个例子是:
儿童A班
运行第二个示例:
有人可以告诉我这两种情况之间的优点和/或缺点吗?我之所以有这些示例,是因为我不想重写父类的构造函数。
php - php后期静态绑定和'self'调用
我已经看过有关此的主题,并且我了解它的工作原理。但这不是很混乱吗?使用self::someMethod()
我们打算停止多态行为,并且我们希望不再依赖于子类中可能的覆盖。但是这个例子(非常不自然,但仍然)表明这种期望会导致意想不到的错误。假设,我们有类层次结构 Shape->Rectangle->Square,并且还有其他东西有用于计算面积的静态方法:
这是因为虽然Rectangle::areaWithArgsNumberCheck
只使用了 'self',但它调用了Shape::checkArgsNumber
使用static::areaNumArgs
. 最后一次调用被解析为Square
类,因为self::
调用转发了静态绑定。
这个问题很容易通过使用类名 ( Rectangle::
) 而不是self::
所以对我来说,如果有一些 static
调用,那么该类层次结构中的所有调用都应该static
明确地使用类名。您只是永远不知道self::
呼叫将被转发到哪里以及将使用哪些可能被覆盖的方法。我对此是否正确,或者在某些情况下,使用“self”转发静态绑定可能有用且安全?
php - 后期静态绑定问题
我在自己的项目中遇到了一些麻烦。我正在编写一个简单的考试系统,为了方便起见,我使用了后期静态绑定。我有下一个代码:
我的方法写在单独的文件中。此外,Router 类是 Controler 的子类,仅在包含文件方法的文件夹上有所不同。
我做 GET-query /login 和 class Routing 使用以下代码执行构建此页面:
我想在这里调用Controler 类的静态方法。我的结果:
XDebug 跟踪:
如果我打电话给 View::{'message'} - 一切都会好的。(View 是 Controler 的子级)
现在我的问题是:当我调用父类的静态方法时,谁能解释为什么 PHP 执行子类的非静态方法?