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;}
这样的东西会存储整数的第二个副本。你能给我解释一下一个物体有什么不同吗?谢谢