如何在php中调用成员函数query()?
我有一个应用程序类,它是从名为db的基类扩展而来的。当我尝试创建一个实例时,得到的错误如下 对非对象调用成员函数query() 我的申请类别是:如何在php中调用成员函数query()?,php,mysqli,Php,Mysqli,我有一个应用程序类,它是从名为db的基类扩展而来的。当我尝试创建一个实例时,得到的错误如下 对非对象调用成员函数query() 我的申请类别是: Class Application extends DB { public $sql; /* * Public Methods */ /* * Constructor */ function Application() { global $sql; $sql = db::getInstance(); } functi
Class Application extends DB
{
public $sql;
/*
* Public Methods
*/
/*
* Constructor
*/
function Application() {
global $sql;
$sql = db::getInstance();
}
function selectSqli($access_table){
$result = $sql->query("select * from $access_table");
return $result;
}
class db extends mysqli{
protected static $instance;
protected static $options = array();
private function __construct() {
$db = self::$options;
// turn of error reporting
mysqli_report(MYSQLI_REPORT_OFF);
// connect to database
@parent::__construct(isset($db['host']) ? $db['host'] : 'localhost',
isset($db['user']) ? $db['user'] : 'root',
isset($db['pass']) ? $db['pass'] : '',
isset($db['dbname']) ? $db['dbname'] : 'angler_blog_post');
// check if a connection established
if( mysqli_connect_errno() ) {
throw new exception(mysqli_connect_error(), mysqli_connect_errno());
}
}
public static function getInstance() {
if( !self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function query($query) {
if( !$this->real_query($query) ) {
throw new exception( $this->error, $this->errno );
}
$result = new mysqli_result($this);
return $result;
}
}
}
我的DB类是:
Class Application extends DB
{
public $sql;
/*
* Public Methods
*/
/*
* Constructor
*/
function Application() {
global $sql;
$sql = db::getInstance();
}
function selectSqli($access_table){
$result = $sql->query("select * from $access_table");
return $result;
}
class db extends mysqli{
protected static $instance;
protected static $options = array();
private function __construct() {
$db = self::$options;
// turn of error reporting
mysqli_report(MYSQLI_REPORT_OFF);
// connect to database
@parent::__construct(isset($db['host']) ? $db['host'] : 'localhost',
isset($db['user']) ? $db['user'] : 'root',
isset($db['pass']) ? $db['pass'] : '',
isset($db['dbname']) ? $db['dbname'] : 'angler_blog_post');
// check if a connection established
if( mysqli_connect_errno() ) {
throw new exception(mysqli_connect_error(), mysqli_connect_errno());
}
}
public static function getInstance() {
if( !self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function query($query) {
if( !$this->real_query($query) ) {
throw new exception( $this->error, $this->errno );
}
$result = new mysqli_result($this);
return $result;
}
}
我尝试了global、plublic,但无法访问函数query()。如何解决这个错误
function selectSqli($access_table){
global $sql;
$result = $sql->query("select * from $access_table");
return $result;
}
或者,如果您使用OOP:
Class Application extends DB
{
public $sql;
/*
* Public Methods
*/
/*
* Constructor
*/
function Application() {
$this->sql = db::getInstance();
}
function selectSqli($access_table){
$result = $this->sql->query("select * from $access_table");
return $result;
}
}
与使用
global$sql相比,您应该更好地注入DB对象代码>
但在您的例子中,$sql
是一个局部变量,而不是属性。正如您在构造函数$this->sql
中声明的那样:当前对象的属性$sql
现在包含DB对象的实例
因此,它应该是:
function selectSqli($access_table){
$result = $this->sql->query("select * from $access_table");
return $result;
}
另外,您可能不知道关于PHP5的一些新闻,因为在PHP5中,使用类似于类名的方法名来实现构造函数,在PHP5中,您应该使用一个特殊的方法\u construct(){}
,用于构造函数
在OOP中查看PHP5的新功能:我相信您忘记添加global$sql在selectSqli函数中使用code>。请注意,为什么应用程序构造函数中有一个全局$sql
?您是否应该使用$this->sql
?您是否知道扩展了定义了是一种关系。这意味着您已经在代码中编写了“每个应用程序都是数据库”语句。那真有点愚蠢。