【问题标题】:PHP4 and static methods / callback functionsPHP4 和静态方法/回调函数
【发布时间】: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 没有关键字。

标签: php oop static php4


【解决方案1】:

static 关键字所做的只是告诉 PHP 一个函数应该被静态调用。实际上,即使是最新版本,您也可以根据需要静态调用任何函数,如this online demo with your code in multiple PHP versions 所示。

如果您turn error reporting to the max, as in this demo,您将看到较新版本的 PHP 会给出 E_STRICT 消息,表明您正在使用一个尚未声明为静态的函数,但在其他方面运行代码与之前完全相同。

进行静态函数调用所需的只是::,这在 PHP 4 中存在且正确。它实际上是在 PHP 5 中整理的 非静态 方法,并且进一步在 5.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2020-06-21
    • 2014-04-27
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多