我在这里面临一个问题,我试图从另一个类静态方法获取类中的值。
我的代码是:
class DB{
private static $_instance = null;
private $_pdo,
$_query,
$_results,
$_error = false,
$_count = 0;
$_operators = array('=', '>', '<', '<=', '>=', '!=');
private $database_name = Config::get('mysql/dbname');
private function __construct(){
try{
$database_host = Config::get('mysql/host');
$database_driver = Config::get('database/driver');
$database_username = Config::get('mysql/username');
$database_password = Config::get('mysql/password');
$dns = ''.$database_driver.':host='.$database_host.';dbname='.$this->database_name.'';
$this->_pdo = new PDO($dns, $database_username, $database_password);
$this->_pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->_pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES ".Config::get('database/names')." ");
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_pdo->exec("SET CHARACTER SET '".Config::get('database/charset')."'");
}catch(PDOException $e){
die($e->getMessage());
}
}
}
它给了我这个错误:
Parse error: syntax error, unexpected '(', expecting ',' or ';' in C:\xampp-php56\htdocs\backend\classes\DB.php on line 46
第 46 行是:private $database_name = Config::get('mysql/dbname');
知道为什么我不能这样做吗?
最佳答案
当我将你的代码放入 IDE 中时,出现语法错误
不允许将表达式作为字段默认值。
在 PHP 中创建类属性时,您可以分配标量值,但不能分配表达式(任何必须计算的值)
此链接有更多内容: Class - variable declaration
解决方案:(注意 _error = false 后面的分号变成了逗号。Per @Edmund Dantes) 在构造函数中赋值。
class DB{
private static $_instance = null;
private $_pdo,
$_query,
$_results,
$_error = false,
$_count = 0,
$_operators = array('=', '>', '<', '<=', '>=', '!=');
private $database_name;
private function __construct(){
$this->database_name = Config::get('mysql/dbname');
try{
$database_host = Config::get('mysql/host');
$database_driver = Config::get('database/driver');
$database_username = Config::get('mysql/username');
$database_password = Config::get('mysql/password');
$dns = ''.$database_driver.':host='.$database_host.';dbname='.$this->database_name.'';
$this->_pdo = new PDO($dns, $database_username, $database_password);
$this->_pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->_pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES ".Config::get('database/names')." ");
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_pdo->exec("SET CHARACTER SET '".Config::get('database/charset')."'");
}catch(PDOException $e){
die($e->getMessage());
}
}
}
关于php - 尝试从全局变量中的静态方法访问值时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045671/