我的oop錯在哪裡?是靜態變數的問題嗎?
class db{
public $conn;
private static $h = "localhost";
private static $u = "root";
private static $p = "123123";
private static $d = "air";
function __construct(){
$this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);
$this->conn->query('SET NAMES UTF8');
//mysqli_query($this->conn,'SET NAMES UTF8');
}
public function getOne($sql,$resultType=MYSQL_ASSOC){//只取一條
$q=$this->conn->query($sql);
$rt=$q->fetch_array($resultType);
return $rt;
}
}
//下面是一個繼承類,就是上面的那個db我寫好了後。有只要引用資料庫(只取一條的,取多條我未寫出)便來繼承。這樣寫不好嗎?謝謝
class airVia extends db{
public function doSql(){
$sql='select * from xls1 where id=1';//實際中的語句複雜,只是測試
$r=$this->getOne($sql);//db::getone($sql);不行
return $r;
}
}//airVia
//使用此類
$wc=new airVia($v);echo $wc->doSql();
錯誤資訊如下:
Fatal error: Call to a member function query() on a non-object in D:\xampp\htdocs\chaxun\class\db.class.php on line 67
請問:
我的思路對嗎?謝謝
一、寫一個DB類,來串連資料庫,以庫要操作資料庫時,可以來繼承;
二,上述語句為何報錯,看樣子是那個$this->conn換成靜態變數也不行。
------解決方案--------------------
應該是conn對象沒有產生成功,檢查一下參數啥的,列印輸出conn對象看看是啥
------解決方案--------------------
Fatal error: Call to a member function query() on a non-object
$this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);
沒有執行個體化成功
但你的代碼並沒有問題,可以正常通過測試(當然是改了使用者名稱、口令、庫名和表名)
錯誤可能產生於其他地方,都 on line 67 了,你才貼出多少?
既然是封裝,就應該把錯誤處理也封裝進來。這樣就不要到處去問為什麼出錯了
------解決方案--------------------
你需要初始化父類的構造方法
------解決方案--------------------
給子類airVia 添加一個建構函式
public function __construct(){
parent::__construct();
}
------解決方案--------------------
需要重新構造一下。
引用:
給子類airVia 添加一個建構函式
PHP code?123public function __construct(){parent::__construct();}