私の何が問題なのですか?静的変数に問題があるのでしょうか?
class db{<br />
public $conn;<br />
private static $h = "localhost";<br />
private static $u = "root";<br />
private static $p = "123123";<br />
private static $d = "air";<br />
function __construct(){<br />
$this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);<br />
$this->conn->query('SET NAMES UTF8');<br />
//mysqli_query($this->conn,'SET NAMES UTF8');<br />
}<br />
public function getOne($sql,$resultType=MYSQL_ASSOC){//只取一条<br />
$q=$this->conn->query($sql);<br />
$rt=$q->fetch_array($resultType);<br />
return $rt;<br />
}<br />
}<br />
//下面是一个继承类,就是上面的那个db我写好了后。有只要引用数据库(只取一条的,取多条我未写出)便来继承。这样写不好吗?谢谢<br />
class airVia extends db{<br />
public function doSql(){<br />
$sql='select * from xls1 where id=1';//实际中的语句复杂,只是测试<br />
$r=$this->getOne($sql);//db::getone($sql);不行<br />
return $r; <br />
}<br />
}//airVia<br />
//使用此类<br />
$wc=new airVia($v);echo $wc->doSql();<br />
ログイン後にコピー
エラーメッセージは次のとおりです:
致命的なエラー: D:xampphtdocschaxunclassdb.class.php の 67 行目
の非オブジェクトに対するメンバー関数 query() の呼び出し
質問してください:
私の考えは正しいでしょうか?ありがとうございます
1. データベースに接続するための DB クラスを作成します。ライブラリがデータベースを操作する場合は、それを継承します。
次に、上記のステートメントでエラーが報告されるのはなぜですか? $this->conn を静的変数に置き換えることはできないようです。
------解決策----------------------
conn オブジェクトが正常に生成されていないはずです。 、確認してください。パラメータなどについては、 conn オブジェクトを出力して、それが何であるかを確認してください
------解決策------ --
致命的なエラー: 非オブジェクトのメンバー関数 query() の呼び出し
$this->conn=mysqli_connect(self::$h,self::$u,self::$p,self::$d);
インスタンス化は成功しませんでした
しかし、コードに問題はなく、テストは正常にパスします (もちろん、ユーザー名、パスワード、ライブラリ名、テーブル名は変更されています)
エラーは他の場所で発生する可能性があります。既に 67 行目にあります。何件投稿しましたか?
カプセル化されているため、エラー処理もカプセル化する必要があります。したがって、何か問題が起こった理由を尋ね回らないでください
-----解決策-------------------------- ------
親クラスのコンストラクターメソッドを初期化する必要があります
-----解決策------------- -------------
がサブクラス airVia にコンストラクター
を追加します。
public function __construct(){<br />
parent::__construct();<br />
}
ログイン後にコピー
-----解決策--------------------------------
再構築が必要です。