【发布时间】:2015-03-25 21:46:44
【问题描述】:
如何在User 类中使用$connect 变量而不发送$connect 作为参数或在用户类中定义global $connect?
而我只想创建一个连接是
$connect = mysqli_connect('localhost', 'root', '1234', 'mydatabase');
错误
警告: mysqli_query() 期望参数 1 为 mysqli,在 第 9 行的 D:\xampp\htdocs\mateocode\index.php 中给出 null
示例代码
<?php
class User {
public $id;
public $username;
function __construct($user_id)
{
$sql = "select id, username from user where id = '$user_id' limit 1";
$result = mysqli_query($connect, $sql);
if(!$result) return false;
if(mysqli_num_rows($result)>0){
$data = mysqli_fetch_assoc($result);
$this->id = $data['id'];
$this->username = $data['username'];
}else{
return false;
}
}
}
$connect = mysqli_connect('localhost', 'root', '1234', 'mydatabase');
if($objUser = new User(1))
echo $objUser->username;
else
echo 'There was an error or user not found!';
【问题讨论】:
-
正如 sgt 所说,“正确的方法”是在构造函数中将 $connect 作为参数传递。这通常被认为是“最佳实践”,将帮助您跟踪代码中变量的来源。
-
使用
$connect作为参数实际上被认为是好的做法(谷歌为“依赖注入”)。例如,它使您的代码更易于测试。 -
除了发送
$connect给班级还有其他方法吗?我知道这项工作,但我不想这样做,因为我担心当我有很多课程时它会增加内存使用量。 -
如果有上千个类,在
User类中使用global $connect会增加搜索$connect变量的时间。