Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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_Class_Mysqli - Fatal编程技术网

Php 在类中使用MySQLi的最佳方法

Php 在类中使用MySQLi的最佳方法,php,class,mysqli,Php,Class,Mysqli,目前我正在这样做: function __construct( $mysqli_connection ) { if( ! empty($mysqli_connection) && is_object($mysqli_connection) && ! $mysqli_connection->connect_error ) { //Make the $mysqli universal to the class equal the

目前我正在这样做:

function __construct( $mysqli_connection )
{
    if( ! empty($mysqli_connection) && is_object($mysqli_connection) && ! $mysqli_connection->connect_error )
    {
        //Make the $mysqli universal to the class equal the given connection
        $this->mysqli = $mysqli_connection;
    }
    else
    {
        die("An invalid MySQLi connection was given.\n");
    }

}//function __construct
并以以下方式开始课程:

new className( $mysqli );
它工作正常,但在我看来:

  • 额外的代码是不必要的
  • 用于占用MySQLi资源的内存增加了一倍(一个在类的内存中,但在主代码中仍然有一个)

我的上述观点正确吗?如果正确,是否有更好的方法从类内部使用MySQLi资源?以上方法是我从搜索中找到的唯一方法。

首先,您的代码可以简化为:

private $mysqli;

function __construct(mysqli $conn)
{
    $this->mysqli = $conn;
}
您的类不必担心连接是否已建立,它应该能够假设连接已建立。此外,类型提示有助于指示调用构造函数时所需的类


其次,
mysqli
对象在另一个对象中使用时不会重复;相反,它的引用计数会增加。一旦计数降至零,对象将被删除。如果总是复制一个对象,那么进行依赖项注入将非常昂贵。

创建一个数据库包装器(或使用一个现有的包装器)并传递它,而不是原始的mysqli连接。好处是,您可以随时更改驱动程序(取决于接口),而无需更改所有代码。请注意,这是依赖项注入设计模式的实现。感谢您提供的信息。这让我感到惊讶,因为像
函数uu构造($int){$this->integer=$int;}
这样的东西会存储整数的第二个副本。你能给我解释一下一个物体有什么不同吗?谢谢