我可以在 PHP 中将匿名函数放入数组中吗?

发布于 2025-01-01 07:44:16 字数 805 浏览 0 评论 0原文

可能的重复:
未解析基本语法的解决方法
为什么 PHP 属性不允许使用函数?

我得到了

解析错误:语法错误,第 87 行 /home/codemonkey/dev/broadnet/bito.api2/broadnet/resources/broadmapresource.php 中出现意外的 T_FUNCTION

从这段代码中:

private $debugFunctions = array(
    "testing" => function() // Line 87
    {
        return "I'm a test function!";
    },
    "foo" => function()
    {
        return "bar";
    }
);

我的印象是我可以在任何可以使用匿名 PHP 函数的地方使用$variables。这是例外,还是我做错了什么?

我正在使用 PHP 5.3.9

Possible Duplicate:
Workaround for basic syntax not being parsed
Why don't PHP attributes allow functions?

I'm getting

Parse error: syntax error, unexpected T_FUNCTION in /home/codemonkey/dev/broadnet/bito.api2/broadnet/resources/broadmapresource.php on line 87

From this code:

private $debugFunctions = array(
    "testing" => function() // Line 87
    {
        return "I'm a test function!";
    },
    "foo" => function()
    {
        return "bar";
    }
);

I was under the impression I could use anonymous PHP functions anywhere I could use $variables. Is this an exception, or am I doing something wrong?

I'm using PHP 5.3.9

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

殤城〤 2025-01-08 07:44:16

您不能对类属性执行此操作,属性初始化必须是常量值。

初始化必须是一个常量值——也就是说,它必须能够
在编译时评估并且不得依赖于运行时
信息以便进行评估。

You can't do this with the class property, the property initialization must be a constant value.

The initialization must be a constant value--that is, it must be able
to be evaluated at compile time and must not depend on run-time
information in order to be evaluated.

巨坚强 2025-01-08 07:44:16

使用构造函数:

class TestClass {
    private $debugFunctions;

    public function __construct() {
        $this->debugFunctions = array(
            "testing" => function()
            {
                return "I'm a test function!";
            },
            "foo" => function()
            {
                return "bar";
            }
        );
    }
}

有关原因的解释,请参阅xdazz 的回答:类属性必须是常量且在编译时已知。如果您需要它是动态的或更复杂的,您可以在实例初始化期间(在构造函数中)填充它。

Use a constructor:

class TestClass {
    private $debugFunctions;

    public function __construct() {
        $this->debugFunctions = array(
            "testing" => function()
            {
                return "I'm a test function!";
            },
            "foo" => function()
            {
                return "bar";
            }
        );
    }
}

For explanation why, see xdazz's answer: class properties must be constant and known at compile time. If you need it to be dynamic or more complex, you cat populate it during initialization of the instance (in the constructor).

夏了南城 2025-01-08 07:44:16

更新:这个答案适用于 PHP 5,它不适用于 PHP 8。

不是这样的,请查看 创建函数
它在当前作用域中创建一个新函数并返回函数名称。

private $debugFunctions = array(
    "testing" => create_function('', 'return "I\'m a test function!";'),
    "foo" => create_function('', 'return "bar";');
);

但不确定上面的例子是否有效。我没有时间测试它。

另请注意,使用 create_function 可能会显着降低应用程序的速度,具体取决于您使用它的频率。

Update: This answer was intended for PHP 5, it will not work with PHP 8.

Not like that, take a look at create_function.
It creates a new function in the current scope and returns the function name.

private $debugFunctions = array(
    "testing" => create_function('', 'return "I\'m a test function!";'),
    "foo" => create_function('', 'return "bar";');
);

Not sure if the above example works, though. I didn't have time to test it.

Also note that using create_function can significantly slow down your application, depending on how frequent you use it.

梦亿 2025-01-08 07:44:16

你可以这么做。

只需在构造函数中初始化它:

function __construct() {
    $debugFunctions = array(
        "testing" => function() // Line 87
        {
            return "I'm a test function!";
        },
        "foo" => function()
        {
            return "bar";
        }
    );
}

You can do that.

Just init it in the costructor:

function __construct() {
    $debugFunctions = array(
        "testing" => function() // Line 87
        {
            return "I'm a test function!";
        },
        "foo" => function()
        {
            return "bar";
        }
    );
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文