PHP报错Constant expression contains invalid operations,数据库密码配置求助
问题解决:Constant expression contains invalid operations 错误
错误原因
PHP规定,类的成员属性在声明时只能用常量表达式初始化,不能使用变量、函数调用或其他动态计算的值。你在DATABASE_CONFIG类里直接用$conf["$mypassword"]给$default['password']赋值,属于动态值引用,触发了这个致命错误。另外代码还有两个逻辑问题:
test.php里定义的$mypassword变量不会自动通过require传递给database.php,需要主动返回数据$conf["$mypassword"]的写法错误,你实际要取的是test.php返回的密码值,而非以密码为键的数组元素
解决方案
1. 修改test.php,返回密钥数据
在test.php末尾添加返回语句,把获取到的用户名和密码以数组形式返回:
// 原test.php末尾代码后添加 return [ 'username' => $username, 'mypassword' => $mypassword ];
2. 修改database.php,用构造函数初始化配置
把类属性的动态赋值放到构造函数中,避开PHP的常量表达式限制:
<?php $conf = require "/var/www/myapp/Config/test.php"; class DATABASE_CONFIG { public $default = []; public function __construct() { $this->default = [ 'datasource' => 'Database/Mysql', //'datasource' => 'Database/Postgres', 'persistent' => 'false', 'host' => '.rds.amazonaws.com', // 注意补全实际RDS地址 'login' => $conf['username'], 'port' => '3306', 'password' => $conf['mypassword'], 'database' => 'test', 'prefix' => '', 'encoding' => 'utf8', ]; } }
补充方案(适配框架限制)
如果你的框架(看起来类似CakePHP)对配置类有特殊要求,也可以先在类外部构建完整配置数组,再通过构造函数赋值:
<?php $conf = require "/var/www/myapp/Config/test.php"; $defaultConfig = [ 'datasource' => 'Database/Mysql', 'persistent' => 'false', 'host' => '.rds.amazonaws.com', 'login' => $conf['username'], 'port' => '3306', 'password' => $conf['mypassword'], 'database' => 'test', 'prefix' => '', 'encoding' => 'utf8', ]; class DATABASE_CONFIG { public $default; public function __construct() { $this->default = $defaultConfig; } }
内容的提问来源于stack exchange,提问作者user12336379
相关产品推荐
相关产品推荐

