Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 声明静态属性,同时包含另一个静态属性_Php_Oop_Php 7 - Fatal编程技术网

Php 声明静态属性,同时包含另一个静态属性

Php 声明静态属性,同时包含另一个静态属性,php,oop,php-7,Php,Oop,Php 7,是否可以定义一个静态属性,同时在其中包含另一个静态属性?类似于下面的代码示例: class Foo { public static $foo = array(Bar::$bar); } class Bar { public static $bar = "Hello"; } 显然,这不会编译,并导致以下错误: 致命错误:常量表达式包含无效操作 在声明自己的类时,是否有方法调用其他类静态/常量?我正在努力减少代码重用,这对我来说是最简单的方法 显然,在PHP 5.6之前,没有办法

是否可以定义一个静态属性,同时在其中包含另一个静态属性?类似于下面的代码示例:

class Foo {
    public static $foo = array(Bar::$bar);
}

class Bar {
    public static $bar = "Hello";
}
显然,这不会编译,并导致以下错误:

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

在声明自己的类时,是否有方法调用其他类静态/常量?我正在努力减少代码重用,这对我来说是最简单的方法


显然,在PHP 5.6之前,没有办法做到这一点,因此我使用的是PHP 7/7.1。

您可以使用第一个类变量设置一个常量,然后在第二个类变量中使用它,例如:

class Bar {
    public static $bar = 'Hello';
}

define('bar_constant', Bar::$bar);

class Foo {
    public static $foo = array(bar_constant);
}

// now Foo::$foo = array('Hello')

您可以使其中一个类具有
常量
。这适用于5.6及更高版本

class Foo {
    const CON = 'Yep';
}

class BAR {
    public static $var = Foo::CON;
}
echo BAR::$var;

我正在考虑将所有这些更改为const,因为它们无论如何都不会更改。只要我可以在不实例化类的情况下访问类常量,那就行了。拥有5.6支持也很好。这也是一个不错的解决方案,但我希望避免将任何代码放在类声明之外。根据“此声明可能包括初始化,但此初始化必须是常量值--即”