【问题标题】:calling constant makes incomprehensible parsing error调用常量会导致难以理解的解析错误
【发布时间】:2012-04-13 15:33:46
【问题描述】:

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

显示的错误是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

【问题讨论】:

    标签: php class constants syntax-error


    【解决方案1】:

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

    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';
        }
    }
    

    From the documentation:

    类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字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);
    

    【讨论】:

    • 呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多