核心提示:学习php遇到一个小问题猜想是类的成员变量的作用域问题吧。按照Java思路应该在下面代码是没有问题的。(是以php的pdo连接数据封装成类)class MySQL_DB{//静态属性,所有哦的数据库实...
学习php遇到一个小问题
猜想是类的成员变量的作用域问题吧。
按照Java思路应该在下面代码是没有问题的。
(是以php的pdo连接数据封装成类)
class MySQL_DB{ //静态属性,所有哦的数据库实例公用,避免重复连接数据库 protected static $_dbh = null; /** * 初始化构造函数 * MySQL_DB constructor. */ public function __construct() { class_exists('PDO') or die("PDO:class not exists."); //连接数据库 if(is_null(self::$_dbh)){ $this->_connection(); } } /** * 连接数据函数 */ protected function _connection(){ $dsn = DB_TYPE_MYSQL.':host='.DB_HOST.';port'.DB_PORT.';dbname='.DB_NAME; try{ $dbh = new PDO($dsn,DB_USER,DB_PASSWORD); //设置sql语句执行错误则抛出异常,事务自动回滚 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //禁用prepared statement的仿真效果(防止sql注入) $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); }catch (PDOException $e){ die('Connection failed:'.$e->getMessage()); } $dbh->exec('SET NAME uft8'); // self::$_dbh = $dbh; return $dbh; } public function _authenticate($username,$password){ $sql = 'select operatorID from wwb_admin where username=:user and password=:pwd'; $stmt = self::$_dbh->p self::$_dbh->prepare();//在使用编辑器打入变量没有提示出prepare该函数,(认为是有问题的) // self::$_dbh->prepare() } //关闭数据库 public function close_conn(){ if(!is_null(self::$_dbh)){ self::$_dbh = null; } } }但是修改成
class MySQL_DB{ //静态属性,所有哦的数据库实例公用,避免重复连接数据库 protected static $_dbh = null; /** * 初始化构造函数 * MySQL_DB constructor. */ public function __construct() { class_exists('PDO') or die("PDO:class not exists."); //连接数据库 if(is_null(self::$_dbh)){ self::$_dbh = $this->_connection();//修改的地方 } } /** * 连接数据函数 */ protected function _connection(){ $dsn = DB_TYPE_MYSQL.':host='.DB_HOST.';port'.DB_PORT.';dbname='.DB_NAME; try{ $dbh = new PDO($dsn,DB_USER,DB_PASSWORD); //设置sql语句执行错误则抛出异常,事务自动回滚 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //禁用prepared statement的仿真效果(防止sql注入) $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); }catch (PDOException $e){ die('Connection failed:'.$e->getMessage()); } $dbh->exec('SET NAME uft8'); // self::$_dbh = $dbh; return $dbh; } public function _authenticate($username,$password){ $sql = 'select operatorID from wwb_admin where username=:user and password=:pwd'; $stmt = self::$_dbh->p self::$_dbh->prepare();//编辑器就会自动提示了 // self::$_dbh->prepare() } //关闭数据库 public function close_conn(){ if(!is_null(self::$_dbh)){ self::$_dbh = null; } } }
不是很清楚该原因。不过按照Java思路,感觉是可以照着第一种是可以直接调用的。不过php不行。
这样问题,猜测是变量的作用域问题。
希望有人知道的话,可以告诉我