php - 尝试从全局变量中的静态方法访问值时出现语法错误

标签 php mysql

我在这里面临一个问题,我试图从另一个类静态方法获取类中的值。

我的代码是:

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/

相关文章:

PHP 无法发布到 MySQL 数据库

php - 如何重定向到带有 Owl Carousel 的不同 html 页面的特定部分

php - 定义索引和 if 语句

MySQL:获取所有子类别,后代

java - 组织.hibernate.QueryException : could not resolve property with column name already defined

php - 安全上传文件

php - Laravel echo 推送器没有收到广播事件

php - MySQL查询打印双记录

mysql - 如何在ansible中为不同主机使用另一个任务中一个任务的返回值

mysql - 创建一个带有自动递增 id 列的 MySQL View