首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中初始化静态变量

在PHP中初始化静态变量
EN

Stack Overflow用户
提问于 2015-02-08 12:49:52
回答 3查看 102关注 0票数 2

摘自PHP手册

与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;表达式是不允许的。因此,虽然可以将静态属性初始化为整数或数组(例如),但不能将其初始化为另一个变量、函数返回值或对象。

因此,这意味着我不能执行以下操作,因为a)不允许表达式,b)不允许函数返回值。

代码语言:javascript
运行
复制
class MyClass {
    // I can't do this.
    public static $var = 10 * 2;

    // I can't do this.
    public static $sum = array_sum( array( 3, 5, 6 ) );
}

但是,对于b)函数返回值是不允许的,那么当array()是一个具有返回值的函数时,为什么可以这样做呢?

代码语言:javascript
运行
复制
class MyClass {
    // I can do this.
    public static $array = array( 3, 5, 6 );
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-08 12:53:58

array()不是一个函数,而是一个初始化器。与普通函数不同,它是在编译时解释的,因此可以用来初始化静态。

对于引用,这是在static关键字之后允许的:

代码语言:javascript
运行
复制
static_scalar_value:
    common_scalar  (e.g. 42)
    static_class_name_scalar (Foo::class)
    namespace_name      (Foo)
    T_NAMESPACE T_NS_SEPARATOR namespace_name (namespace \Foo)
    T_NS_SEPARATOR namespace_name (\Foo)
    T_ARRAY '(' static_array_pair_list ')' e.g. array(1,2,3)
    '[' static_array_pair_list ']' e.g. [1,2,3]
    static_class_constant e.g. Foo::bar
    T_CLASS_C (__CLASS__)

parser.y#945

Php 5.6在这个列表中添加了“静态操作”,这使得在静态表达式中使用表达式成为可能,只要这些表达式最终解析为静态标量。

代码语言:javascript
运行
复制
class X {
    static $foo = 11 + (22/11); // syntax error in 5.5, valid in 5.6
}
票数 4
EN

Stack Overflow用户

发布于 2015-02-08 12:54:08

一个好问题!简单的ansvar是,array()看起来只是一个函数,但实际上并不是一个函数。

来自PHP文档

注意: array()是用来表示文字数组的语言结构,而不是常规函数。

票数 2
EN

Stack Overflow用户

发布于 2015-02-08 12:54:05

因为数组不是函数。

虽然array(1,2)看起来像在调用一个名为数组的函数,但没有执行任何排序。您只是在创建一个数组,而不是函数调用。它更接近于说$a = 1

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28394109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档