Aha*_*had 2 php java static parsing properties
在创建应用程序时,我遇到了一个我有静态变量的情况.
让我们说它是:
public static name = "abdul ahad";
Run Code Online (Sandbox Code Playgroud)
在某个地方,我有另一个名为user的静态变量,它访问上面定义的静态变量名.
public static user = self::$name;
Run Code Online (Sandbox Code Playgroud)
注意:这些属性是同一个类的成员.
这样做会产生以下错误.
解析错误:语法错误,意外的'$ XXX'(T_VARIABLE),期望在xx行的C:\ xxxx\xxx\xxx.php中的标识符(T_STRING)或类(T_CLASS)
对于Java,同样的概念也适用,如下所示.
public static int i = 5;
public static int j = Main.i;
public static void main(String[] args) {
System.out.println(String.format("Static j was : %d", Main.j));
Run Code Online (Sandbox Code Playgroud)
所以,我想知道在PHP中是否可能以及我在语法上做错了什么.如果不是,那么您是否愿意解释原因?
静态声明是在编译时计算的,因此您无法使用另一个变量初始化静态属性(如果它是静态的,则无关紧要).
从文档:
与任何其他PHP静态变量一样,静态属性只能在PHP 5.6之前使用文字或常量进行初始化; 表达式是不允许的.在PHP 5.6及更高版本中,相同的规则适用于const表达式:一些有限的表达式是可能的,只要它们可以在编译时进行评估.
注意:您发布的错误消息很可能来自您未与我们分享的某些代码.此外,您的代码中还有另一个错误:
public static user = self::$name;
// ^
// the actual error
Run Code Online (Sandbox Code Playgroud)
它应该产生以下错误消息:
PHP解析错误:语法错误,意外'用户'(T_STRING),期待变量(T_VARIABLE)...
PHP中的每个变量都必须有$(美元符号)前缀,因此适当的属性声明应如下所示:
public static $user = self::$name;
Run Code Online (Sandbox Code Playgroud)
但是,正如我上面所写,您无法使用变量初始化静态属性,因此会产生以下错误:
PHP致命错误:常量表达式包含无效的操作...
仅用于比较,来自您帖子的错误消息:
解析错误:语法错误,意外的'$ XXX'(T_VARIABLE),期待标识符(T_STRING)或类(T_CLASS)...
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |