/ / Możliwe jest rozszerzenie z mysqli na nową klasę i użycie jej jako statycznego? - php, mysql, baza danych, mysqli

Możliwe jest rozszerzenie z mysqli w nowej klasie i użycie go jako statycznego? - php, mysql, baza danych, mysqli

Co chcę zrobić, to:

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" );
}

Celem tego pytania jest uniknięcie użycia słowa kluczowego "global", jak:

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" );
}

Rozwiązaniem tego problemu jest zadeklarowanie zmiennej mysqli w tablicy $ _ENV, ale nie chcę używać $ _ENV do zarządzania MYSQLI, chcę użyć klasy statycznej takiej jak DB (czy to możliwe?)

Odpowiedzi:

0 dla odpowiedzi № 1

To wchodzi w zakres skład nad dziedziczeniem. W podanym przykładzie znacznie lepiej byłoby, aby jsut przekazał klasie obiekt 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();

Twoje przykłady nie wymagają dziedziczenia.


0 dla odpowiedzi nr 2

Po wszystkim znalazłem rozwiązanie:

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" );
}