【问题标题】:Concatenating __DIR__ constant with a string as an array value which is a class member in PHP将 __DIR__ 常量与字符串连接为数组值,该数组值是 PHP 中的类成员
【发布时间】:2012-02-04 07:18:43
【问题描述】:

谁能告诉我为什么这不起作用? 这只是我试图在其他地方做的一个粗略的例子。

$stuff = array(
    'key' => __DIR__ . 'value'
);

但是,这会产生错误:

PHP Parse error:  syntax error, unexpected '.', expecting ')' in /var/www/.../testing.php on line 6

另外,这有效:

$stuff = array(
    'key' => "{__DIR__} value"
);

【问题讨论】:

  • 感谢 ManseUK 的快速响应。为了进一步了解我的问题-它返回了什么?我 var_dump'ed 它:string(26) "/var/www/../trunk"
  • 在你的构造函数上设置 $stuff 值

标签: php arrays string class constants


【解决方案1】:

第一段代码不起作用,因为它不是一个常量表达式,因为您试图连接两个字符串。初始类成员必须是常量。

来自documentation

[property] 初始化必须是一个常量值——也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息才能进行评估。

【讨论】:

  • 所以因为 __ DIR __ 是当前文件的位置,所以它的运行时信息在编译时不可用。谢谢蒂姆。
  • @acairns:不完全是。编译脚本时,PHP 的值为__DIR__,正如您在初始化字符串时看到的那样:"{__DIR__} value"。访问魔术常量的方式是这里唯一的区别,其中一个被视为常量表达式,而另一个则不是。
【解决方案2】:

您不能在属性初始化中使用运算符。解决方法是使用构造函数:

public function __construct()
{
  $this->stuff = array(
        'key'   =>  __DIR__ . 'value'
  );
}

来自 PHP 文档:

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

http://www.php.net/manual/en/language.oop5.properties.php

【讨论】:

    【解决方案3】:

    在构造函数上设置 $stuff 值

    function __construct()
    {
    $this->$stuff = array(
            'key'   =>  __DIR__ . 'value'
        );
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2021-10-05
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多