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