在php中使用变量作为关联数组值的错误

时间:2013-01-03 09:00:09

标签: php associative-array

出于某种原因,这给了我以下错误:syntax error, unexpected T_VARIABLE

 $mysql = json_decode(getenv("VCAP_SERVICES"));
 $mysql = $mysql["mysql-5.1"][0]["credentials"];

class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'port' => $mysql['port'],  // <-- Line with error
        'login' => $mysql['username'],
        'password' => $mysql['password'],
        'database' => $mysql['name'],
        'prefix' => ''
        //'encoding' => 'utf8',
    );

    public $test = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'user',
        'password' => 'password',
        'database' => 'test_database_name',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
}

我知道你可以在数组中使用变量作为值,那么发生了什么?

3 个答案:

答案 0 :(得分:3)

看起来您正在尝试将属性的默认值设置为变量。

你不能这样做,甚至不在数组内。这是PHP的解析器吸吮的一半,PHP的四分之一缺乏适当的错误消息,并且有点理智。

您需要在构造函数中执行此操作,而不是传入$mysql

$config = new DATABASE_CONFIG($mysql);

class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'port' => null,
        'login' => null,
        'password' => null,
        'database' => null,
        'prefix' => ''
        //'encoding' => 'utf8',
    );

    public function __construct($mysql) {
        $this->default['port'] = $mysql['port']; // etc
    }

}

答案 1 :(得分:0)

$ mysql在类中没有作用域。 您需要将它作为参数注入类构造函数,然后为类属性

定义数组值

答案 2 :(得分:0)

您正在尝试引用类中的变量,该类在该类的外部中定义。

PHP不知道该类定义中的$mysql是什么。