数组定义中的意外双引号

时间:2017-01-30 23:42:06

标签: php

我看到数组定义中的解析错误是类的私有静态成员。

有问题的代码是:

// %1$s for table name
// %2$s for character set collate
// Version 1 is the initial DB layout
private static $version_sql = array(
    1   =>  "CREATE TABLE %1$s (
                id int(11) NOT NULL AUTO_INCREMENT,
                chance_id int(11) UNSIGNED,
                user_fingerprint varchar(32),
                state tinyint UNSIGNED NOT NULL DEFAULT 0,
                expires int(11) UNSIGNED,
                email varchar(255),
                PRIMARY KEY  id (id)
                UNIQUE KEY chance_user (chance_id,user_fingerprint)
            ) %2$s;"
);

引发的解析错误是Parse error: syntax error, unexpected '"',并且给出的行号是SQL定义的第一行(包含CREATE TABLE的行)。

我读过Parse Error: Unexpected double quotes in array这是一个类似的错误,但似乎更多的是在引用变量不可用的上下文中使用字符串插值,这不是我正在做的事情这里。

知道我在这里失踪的是什么吗?

1 个答案:

答案 0 :(得分:2)

您需要转义$个字符,因为您的字符串包含双引号中的$s。 PHP尝试填写该变量的内容(static上下文中不允许)。

$替换为\$或使用单引号作为整个字符串。

// %1$s for table name
// %2$s for character set collate
// Version 1 is the initial DB layout
private static $version_sql = array(
    1   =>  'CREATE TABLE %1$s (
                id int(11) NOT NULL AUTO_INCREMENT,
                chance_id int(11) UNSIGNED,
                user_fingerprint varchar(32),
                state tinyint UNSIGNED NOT NULL DEFAULT 0,
                expires int(11) UNSIGNED,
                email varchar(255),
                PRIMARY KEY  id (id)
                UNIQUE KEY chance_user (chance_id,user_fingerprint)
            ) %2$s;'
);