PHP OOP:对象属性的值可以是函数吗?

PHP OOP:对象属性的值可以是函数吗?,php,oop,gettext,Php,Oop,Gettext,我的问题很简单:在PHP OOP中,我希望对象属性的值由函数返回。 具体来说:我想要一个字符串用gettext翻译。但似乎属性的值必须是字符串、数字或数组,而不是函数 为什么会这样 是否有一种解决方案可以满足我转换价值的需要 我的代码与此类似: <?php class Bar extends Foo { public $baz = array('lorem' => __('ipsum')); // other code ?> 如果您查看有关的手册,您将看到: 此声明

我的问题很简单:在PHP OOP中,我希望对象属性的值由函数返回。 具体来说:我想要一个字符串用gettext翻译。但似乎属性的值必须是字符串、数字或数组,而不是函数

  • 为什么会这样
  • 是否有一种解决方案可以满足我转换价值的需要
  • 我的代码与此类似:

    <?php
    class Bar extends Foo {
      public $baz = array('lorem' => __('ipsum'));
    
      // other code
    ?>
    

    如果您查看有关的手册,您将看到:

    此声明可能包括初始化,但 初始化必须是一个常量值——也就是说,它必须能够 在编译时进行计算,并且不能依赖于运行时 信息,以便进行评估

    因此,在声明属性时不能使用函数

    但是,该值可以在其他地方设置,因此在您的情况下,您可以在构造函数中设置该值:

    <?php
    class Bar extends Foo {
      public $baz;
    
      function __construct()
      {
         $this->baz = array('lorem' => __('ipsum'));
      }
    
      // other code
    ?>
    
    
    
    在PHP中,for类必须是标量值,因此,不能期望调用函数作为属性值。要正确地执行此操作,需要在构造函数中设置值

    <?php
    class Bar extends Foo {
      public $baz = array('lorem' => NULL);
    
      public function __construct() 
      {
        $this->baz['lorem'] = __('ipsum')
      }
    ?>
    
    
    
    属性必须是标量。属性在编译时设置(在读取和解析代码时)。调用方法和函数之类的东西的代码在运行时(代码运行时)运行。所以,不,不可能调用这样的函数。我相信将来有计划使简单表达式(如加法和字符串串联)在编译时成为可能,但在编译时调用函数很可能永远不可能。“标量”不是正确的词。例如,数组不是标量。正确的词应该是“常量值”(即不依赖于运行时信息的值)。