文章出處

學習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->pself::$_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->pself::$_dbh->prepare();//編輯器就會自動提示了//        self::$_dbh->prepare()    }    //關閉數據庫    public function close_conn(){        if(!is_null(self::$_dbh)){            self::$_dbh = null;        }    }}

不是很清楚該原因。不過按照Java思路,感覺是可以照著第一種是可以直接調用的。不過php不行。

這樣問題,猜測是變量的作用域問題。

希望有人知道的話,可以告訴我

看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170106/82864.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()