我对OOP有些新手,并尝试使用类转换我现有的许多代码。我的第一堂课是“工作”,我的主要剧本叫:
##
## New JOB Instance begins
##
$job = new Job();
$job->validate($job_status,$ber_order_number);
$job->sID($job->ExistingOrNew());
$job->parseJobInfo( $msg_blocks['Job Information']);
$job->parseLocationInfo( $msg_blocks['Location Address']);
$job->parseContactInfo( $msg_blocks['Contact Information']);
在我的job.class.php中,我正在尝试使用构造函数打开连接并为我的数据库建立链接,$ _dblink被定义为私有:
function __construct() {
$_dblink = new mysqli( $this->_server, $this->_user, $this->_pass, "jobs" ); // connection to the jobs database
if ( $_dblink->connect_error ) {
die( 'Connect Error (' . $_dblink->connect_errno . ') ' . $_dblink->connect_error );
}
}
当我点击“ExistingOrNew”方法时,我得到致命错误:在非对象上调用成员函数query()
function ExistingOrNew( ) {
$q = "SELECT id FROM " . jJOBS . " WHERE order_number = '" . $this->order_number . "'";
#
echo "<pre>";
print_r($this);
echo "</pre>";
#
if ( $r = $this->_dblink->query( $q )) {
while ( $row = $r->fetch_assoc( )) {
$id = $row['id'];
}
$r->free( );
}
if ( empty ( $id )) {
$id = $this->Create( );
}
return $id;
}
我不明白为什么我的私有$ _dblink变量没有用于后续方法。我错过了什么?
答案 0 :(得分:2)
您必须使该链接成为类成员,以便稍后可以使用$this->
运算符。
function __construct() {
$this=>_dblink = new mysqli( $this->_server, $this->_user, $this->_pass, "jobs" ); // connection to the jobs database
if ( $this->_dblink->connect_error ) {
die( 'Connect Error (' . $_dblink->connect_errno . ') ' . $_dblink->connect_error );
}
}