静态属性访问PHP中的静态属性

时间:2017-11-06 17:33:37

标签: java php parsing properties static

在创建应用程序时,我遇到了一个我有静态变量的情况。

让我们说它是:

public static name = "abdul ahad";

在某个地方,我有另一个名为 user 的静态变量,它访问上面定义的静态变量名。

public static user = self::$name;
  

注意:这些属性是同一类的成员。

执行此操作会出现以下错误。

解析错误:语法错误,意外的'$ 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));

所以,我想知道它是否可以在PHP&我在做什么错误的语法。如果不是,那么您是否愿意解释原因?

1 个答案:

答案 0 :(得分:5)

静态声明是评估编译时,所以你不能使用另一个变量初始化静态属性(如果它是静态的那么无关紧要)。

来自documentation

  

与任何其他PHP静态变量一样,静态属性只能在PHP 5.6之前使用文字或常量进行初始化;表达式是不允许的。在PHP 5.6及更高版本中,相同的规则适用于const表达式:只要可以在编译时对它们进行求值,就可以使用一些有限的表达式。

注意:您发布的错误消息很可能来自您未与我们分享的某些代码。此外,您的代码中还有另一个错误:

public static user = self::$name;
//            ^
// the actual error

它应该产生以下错误消息:

  

PHP Parse错误:语法错误,意外'用户'(T_STRING),期待变量(T_VARIABLE)......

PHP中的每个变量都必须有$(美元符号)前缀,因此正确的属性声明应如下所示:

public static $user = self::$name;

但是,正如我上面所写,你不能使用变量初始化静态属性,因此会产生以下错误:

  

PHP致命错误:常量表达式在...中包含无效操作

仅用于比较,来自帖子的错误消息:

  

解析错误:语法错误,意外的'$ XXX'(T_VARIABLE),期待标识符(T_STRING)或类(T_CLASS)...