调用常量会导致难以理解的解析错误


calling constant makes incomprehensible parsing error

我被一个难以理解的语法错误阻止了,这让我很疯狂:/

显示的错误是Parse error: syntax error, unexpected '.', expecting ',' or ';'

这是使它:

class FamillePieceControllerCore extends FrontController
{
    public $php_self = 'famille-piece.php';
    private $webservice_url = _CICERONE_CONNECT_BASE_URL_ . 'WSC003&P2=0';
}

其中_CICERONE_CONNECT_BASE_URL_在其他文件中定义。

如果我删除. 'WSC003&P2=0'代码工作正常。

我不明白:/感谢您的帮助

ps:我用的是php 5.3.8

不能使用表达式(如串联)初始化类属性。相反,您必须在构造函数中执行此操作:

class FamillePieceControllerCore extends FrontController
{
    public $php_self = 'famille-piece.php';
    private $webservice_url;
    public function __construct() {
      $this->webservice_url = _CICERONE_CONNECT_BASE_URL_ . 'WSC003&P2=0';
    }
}

从文档中:

类成员变量称为"属性"。您可能还会看到它们使用其他术语(例如"属性"或"字段")来引用,但出于此参考的目的,我们将使用"属性"。它们的定义是使用关键字之一publicprotectedprivate,后跟一个正态变量声明。

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

使用 define() 定义的常量是在运行时定义的,因此在初始化属性时,_CICERONE_CONNECT_BASE_URL_的值在编译时是未知的。

更新更高版本的 PHP 版本:

从 PHP 5.6 开始,类属性声明中允许使用简单表达式,只要它们在编译时仍然可以计算。 因此,原始发布的代码将在 PHP 5.6+ 中正确编译和执行。 仍然不允许任何需要运行时评估的操作,例如函数调用或变量插值。

// This is okay in PHP 5.6+
public $property = SOME_CONST . " other stuff";
// This is still not possible since
public $property = strlen(SOME_CONST);