【问题标题】:Declaring Static Property While Including Another Static Property在包含另一个静态属性的同时声明静态属性
【发布时间】:2017-07-06 09:06:39
【问题描述】:

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

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

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

显然这不会编译,并导致以下错误:

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

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

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

【问题讨论】:

标签: php oop php-7


【解决方案1】:

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

class Foo {
    const CON = 'Yep';
}

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

【讨论】:

  • 我正在考虑将所有这些更改为 const,因为它们无论如何都不会改变。只要我可以在不实例化类的情况下访问类常量,那将起作用。支持 5.6 也很好。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 这也不是一个糟糕的解决方案,但我想避免将任何代码放在类声明之外。
猜你喜欢
  • 2016-10-06
  • 2011-10-24
  • 2015-02-13
  • 2015-02-24
  • 2017-03-23
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多