Php 意外'&引用';在[……]

Php 意外'&引用';在[……],php,Php,在一节课上,我在第22行得到了一个“意想不到的”“[…”,而我却一辈子都不知道为什么 错误在第22行 <?php namespace oowp\post; global $wpdb; class PostObjectQueryBuilder extends QueryBuilder implements IExtendable { use Extendable; // WP Tables private $tablePosts; //T

在一节课上,我在第22行得到了一个“意想不到的”“[…”,而我却一辈子都不知道为什么

错误在第22行

<?php
namespace oowp\post;

global $wpdb;

class PostObjectQueryBuilder extends QueryBuilder implements IExtendable {
    use Extendable;

    // WP Tables
    private $tablePosts;             //The table of Posts.
    private $tablePostmeta;          //The Meta Content (a.k.a. Custom Fields) table.
    private $tableComments;          //The Comments table.
    private $tableCommentmeta;       //The table contains additional comment information.
    private $tableTerms;             //The terms table contains the 'description' of Categories, Link Categories, Tags.
    private $tableTermTaxonomy;      //The term_taxonomy table describes the various taxonomies (classes of terms). Categories, Link Categories, and Tags are taxonomies.
    private $tableTermRelationships; //The term relationships table contains link between the term and the object that uses that term, meaning this file point to each Category used for each Post.
    private $tableUsers;             //The table of Users.
    private $tableUsermeta;          //The usermeta table contains additional user information, such as nicknames, descriptions and permissions.
    private $tableLinks;             //The table of Links.
    private $tableOptions;           //The Options table.

    // LINE 22 BELOW
    const BASE_QUERY = "SELECT wp.ID FROM `{$this->tablePosts}` wp
        INNER JOIN `{$this->tablePostMeta}` wm ON (wm.`post_id` = wp.`ID`)
        INNER JOIN `{$this->tableTermRelationships}` wtr ON (wp.`ID` = wtr.`object_id`)
        INNER JOIN `{$this->tableTermTaxonomy}` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
        INNER JOIN `{$this->tableTerms}` wt ON (wt.`term_id` = wtt.`term_id`)";

这是因为类常量需要有一个常量值,而您的定义不是常量

从类常量开始:

值必须是常量表达式,而不是(例如)变量, 属性或函数调用

通过删除
const
并将
BASE\u QUERY
转换为
$BASE\u QUERY
并删除
$this->
作为其他变量,可以证明您的语法在类外是正确的,它应该能够成功解析


您可以将此表达式定义为成员变量,但不能在初始化期间定义。这是因为PHP中的成员变量也必须初始化为常量表达式。最简单的解决方案是在类中定义
$BASE\u QUERY
,然后在构造函数中初始化它。

这是因为类常量需要有一个常量v值,并且您的定义不是恒定的

从类常量开始:

值必须是常量表达式,而不是(例如)变量, 属性或函数调用

通过删除
const
并将
BASE\u QUERY
转换为
$BASE\u QUERY
并删除
$this->
作为其他变量,可以证明您的语法在类外是正确的,它应该能够成功解析


您可以将此表达式定义为成员变量,但不能在初始化过程中定义。这是因为PHP中的成员变量也必须初始化为常量表达式。最简单的解决方案是在类中定义
$BASE\u QUERY
,然后在构造函数中对其进行初始化。

我不明白为什么要创建一个常量将您的基本查询重新命名

表达式不允许作为类常量值

有一个返回基查询的函数很简单,您可以在任何需要的地方调用它

public function getBaseQuery()
{
    return "SELECT wp.ID FROM `{$this->tablePosts}` wp
    INNER JOIN `{$this->tablePostMeta}` wm ON (wm.`post_id` = wp.`ID`)
    INNER JOIN `{$this->tableTermRelationships}` wtr ON (wp.`ID` = wtr.`object_id`)
    INNER JOIN `{$this->tableTermTaxonomy}` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
    INNER JOIN `{$this->tableTerms}` wt ON (wt.`term_id` = wtt.`term_id`)";
}

我不明白为什么要创建一个常量来进行基本查询

表达式不允许作为类常量值

有一个返回基查询的函数很简单,您可以在任何需要的地方调用它

public function getBaseQuery()
{
    return "SELECT wp.ID FROM `{$this->tablePosts}` wp
    INNER JOIN `{$this->tablePostMeta}` wm ON (wm.`post_id` = wp.`ID`)
    INNER JOIN `{$this->tableTermRelationships}` wtr ON (wp.`ID` = wtr.`object_id`)
    INNER JOIN `{$this->tableTermTaxonomy}` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
    INNER JOIN `{$this->tableTerms}` wt ON (wt.`term_id` = wtt.`term_id`)";
}

同样,我用实例变量初始化它,这对静态变量(或常量)没有意义。我想我没想清楚。@sigsve-错误消息会让你从根本上摆脱问题。至少在PHP 7中,错误消息是正确的:
致命错误:常量表达式也包含无效操作
,我正在用实例变量初始化它,这对静态变量(或常量)没有任何意义。我想我没有想清楚。@sigsve-错误消息本质上会引导您远离根本原因。至少在PHP 7中,错误消息是正确的:
致命错误:常量表达式包含无效操作