Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 它';有没有可能在一个新类中从mysqli扩展并将其用作静态类?_Php_Mysql_Database_Mysqli - Fatal编程技术网

Php 它';有没有可能在一个新类中从mysqli扩展并将其用作静态类?

Php 它';有没有可能在一个新类中从mysqli扩展并将其用作静态类?,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,我想做的是: class DB extends mysqli { ... } DB :: connect( ... ); DB :: query( "SELECT * FROM myDB" ); class AnotherClass { function helloWorld() { DB :: query( "SELECT * FROM withoutUsingGlobalKeyword" ); } } function functions() { DB

我想做的是:

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变量,但我不想使用$_ENV来管理mysqli,我想使用一个静态类,比如DB(可能吗?)

这属于。在您提供的示例中,最好是jsut传递类a 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();

您的示例似乎不需要任何继承。

毕竟,我找到了一个解决方案:

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

你为什么要这么做?这没有好处!看看区别,代码更容易阅读。难道你不能用程序风格的mysqli方法吗?比什么更容易阅读?对我来说,它似乎不再可读了。此外,静态在OOP中被认为是不好的实践,它们实际上只是伪装的全局变量。它们将使您的代码难以正确地进行单元测试,并降低使用DB类的任何类的灵活性,因为它们不能与DB类隔离。你有很多缺点,但没有真正的好处。@如果你使用mysql,提问加倍是正确的方法,但是,我需要使用mysqli来支持事务,如果你使用mysqli过程风格,你会看到这种风格需要在调用中使用$link(mysqli_query($link,$query))。然后你需要使用global$link,同样我们也会在同样的问题中避免使用global关键字。谢谢.function functions(){global$db;$db->helloWorld();}@CrisHongKongCRISHK想这样做没有任何意义.class另一个类{function helloWorld2(){global$db;$db->helloWorld();}