2012-02-04 17 views
0

クラスメソッドでは、私が持っている私のスクリプトで私の最初の行NULLです。次に、私は持っています:グローバル変数は

class main { 

    function init() { 
     $this->session_start(); 
    } 

    protected function session_start() { 
     $sh = new session_handler(); 
     session_set_save_handler(
      array (& $sh, 'open'), 
      array (& $sh, 'close'), 
      array (& $sh, 'read'), 
      array (& $sh, 'write'), 
      array (& $sh, 'destroy'), 
      array (& $sh, 'gc') 
     );   
    } 

} 

すべての問題はsession_handlerクラスにあります。このコードは:

public function write($id, $data) { 
    global $db; 

    var_dump($db); //returns NULL 
} 

$dbNULL代わりのdb_classのインスタンスであると述べています。

注意、db_classオブジェクトはwrite()メソッドを呼び出すときを除いて動作します。私はこの問題を推測

class main { 

    function init() { 
     global $db; 

     var_dump($db); //returns the db object correctly 

     $this->session_start(); 
    } 

    protected function session_start() { 
     $sh = new session_handler(); 
     session_set_save_handler(
      array (& $sh, 'open'), 
      array (& $sh, 'close'), 
      array (& $sh, 'read'), 
      array (& $sh, 'write'), 
      array (& $sh, 'destroy'), 
      array (& $sh, 'gc') 
     ); 
    } 

} 
+1

ような何かをしようとしてについて

を初期化したいクラス名の値を持っていることを確認する必要がありますね場合はどうこれは '$ db = new $ db_class();という行のコードの直下でvar_dumpするときに表示されます。 '? –

+2

グローバルを使用する理由は、dbインスタンスをクラスに渡すとはるかに良いでしょう。 –

+0

$ db = new $ db_class()は$ db = new db_class()にしてください。 –

答えて

1

は、最初の行で
$デシベル=新しい$ db_class()です。

それは

$db = new db_class(); 

ようなものか、$ db_classは、あなたがどのようにこの

class main{ 
protected $_db; 

function init($db){ 
    $this->_db = $db; 
    $this->session_start(); 
} 

protected function session_start() { 
    $sh = new session_handler(); 
    session_set_save_handler(
     array (& $sh, 'open'), 
     array (& $sh, 'close'), 
     array (& $sh, 'read'), 
     array (& $sh, 'write'), 
     array (& $sh, 'destroy'), 
     array (& $sh, 'gc') 
    );   
} 
public function write($id, $data) { 
    vardump($this->_db); 
} 
} 
+0

これはちょうど例であるので開始してどこでも働く –

+0

これは私が確信している問題ではない –