0

私がしたいのはこれです:

class DB extends mysqli {
 ...
}

DB :: connect( ... );

DB :: query( "SELECT * FROM myDB" );

class AnotherClass {
  function helloWorld()
  {
     DB :: query( "SELECT * FROM withoutUsingGlobalKeyword" );
  }
}

function functions()
{
    DB :: query( "SELECT * FROM withoutUsingGlobalKeyword" );
}

この質問のポイントは、次のような「グローバル」キーワードの使用を避けることです。

global $mysqli;
$mysqli = new mysqli( ... );

class AnotherClass {
   function helloWorld()
   {
      global $mysqli;
      $mysqli->query( "SELECT * FROM IDontWantToUseGlobalKeyword" );
   }
}

function functions()
{
    global $mysqli;
    $mysqli->query( "SELECT * FROM IDontWantToUseGlobalKeyword" );
}

これに対する解決策は、$ _ ENV配列でmysqli変数を宣言することですが、MYSQLIを管理するために$ _ENVを使用したくないので、DBのような静的クラスを使用したいです(それは可能ですか?)

4

2 に答える 2

0

これは、継承をめぐる構成に該当します。あなたが提供した例では、クラスにmysqlオブジェクトを渡すほうがはるかに良いでしょう。

Class DB {
    protected $mysqli;
    function __construct( Mysqli $mysqli ) {
        $this->mysqli = $mysqli;
    }
    function helloWorld() {
        $this->mysqli->query( "SELECT * FROM IDontWantToUseGlobalKeyword" );
    }
}

$db = new DB( new mysqli(...) );
$db->helloWorld();

あなたの例は継承を必要としないようです。

于 2012-05-21T06:11:09.277 に答える
0

結局のところ、私は解決策を見つけました:

global $mysqli;
$mysqli = new mysqli( ... );

class DB  {
  public static function getConnection()
  {
     global $mysqli;
     return $mysqli;
  }
 ...
}



$mysqli->query( "SELECT * FROM myDB" );

class AnotherClass {  
  function helloWorld()
  {
     $db = DB :: getConnection();
     $db->query( "SELECT * FROM withoutUsingGlobalKeyword" );
  }
}

class DBAccess {
   public $db;
   function __construct()
   {
      $this->db = DB :: getConnection();
   }
}

class MultipleMethodDBSupport extends DBAccess {
   function __construct()
   {
       parent :: __construct();
   }

   function m1()
   {
      $this->db->query( "SELECT * FROM withoutUsingGlobalKeyword" );
   }

   function m2()
   {
      $this->db->query( "SELECT * FROM withoutUsingGlobalKeyword" );
   }
}

function functions()
{
    $db = DB :: getConnection();
    $db->query( "SELECT * FROM withoutUsingGlobalKeyword" );
}
于 2012-05-21T11:11:05.457 に答える