php学习中一个小问题

学习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不行。

这样问题,猜测是变量的作用域问题。

希望有人知道的话,可以告诉我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tobin liao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值