0

私は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変数が後続のメソッドに引き継がれない理由がわかりません。私は何が欠けていますか?

4

1 に答える 1

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 );
    }
}
于 2012-10-30T16:14:46.583 に答える