【发布时间】:2013-10-16 01:31:12
【问题描述】:
static 关键字是在 PHP5 中引入的,这有点让人得出结论,PHP4 不支持静态方法或变量。然而,当我在 PHP 4.4.9 上运行以下代码时,它可以在没有调用构造函数的情况下工作。
<?php
class a {
function a() {
echo "CONSTRUCTOR CALLED\r\n";
}
function b($var) {
return $var . 'x';
}
}
print_r(array_map(array('a', 'b'), array('a', 'b')));
你可以用这个 PHP“小提琴”来玩弄代码:
http://sandbox.onlinephpfunctions.com/code/1d6882a8264620a0165d7345791f8680586a869e
关于这是如何工作的任何想法?
【问题讨论】:
-
这段代码与静态函数有什么关系?这只是一个简单的类回调
-
@MarkBaker 这是一个奇怪的例子,但是
array('a', 'b')作为回调代表a::b,即静态函数调用。 -
它正在调用类方法,但是 PHP4 OOP 不需要 static 关键字就可以工作,因为无论如何都可以静态或动态调用方法,并且由于 b() 不包含实例引用,因此不会出现错误...只是后来的版本收紧了规则
-
@MarkBaker Right,这是 OP 问题的答案。它仍然是一个静态调用,并且在 PHP 4 中同样有效,即使 PHP 4 没有关键字。