我只知道OOP的基础知识。实际上我使用MySQLi连接,我想避免每次在Classes方法中调用它。我还想避免将其作为参数包含在内。
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
class C1
{
function F1()
{
// Using $mysqli->query();
}
function F2()
{
// Using $mysqli->query();
}
}
class C2
{
function F1()
{
// Using $mysqli->query();
}
}
我读过this post几乎没有帮助我理解使用Constructors表示要采取的方向但我不明白具体如何使用它们。
我尝试过类似的东西:
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
class C1
{
private $mysqli;
public function __construct(mysqli $mysqli)
{
$this->mysqli = $mysqli;
}
public static function F1()
{
print_r($this->mysqli);
// $mysqli = $this->mysqli;
}
}
C1::F1();
但我收到了这个错误:
致命错误:在第38行的C:\ Users \ Ivan \ Documents \ GitHub \ PhpRestDoc \ test.php中不在对象上下文中时使用$ this
答案 0 :(得分:1)
如果您想使用静态方法,您的代码将如下所示:
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
class C1
{
private static $mysqli;
public static function setConnection($db)
{
self::$mysqli = $db;
}
public static function F1()
{
print_r(self::$mysqli);
// $mysqli = self::$mysqli;
}
}
C1::setConnection($mysqli);
C1::F1();
您也可以创建它的实例:
$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
class C1
{
private $mysqli;
public function __construct($mysqli)
{
$this->mysqli = $mysqli;
}
public function F1()
{
print_r($this->mysqli);
// $mysqli = $this->mysqli;
}
}
$model = new C1($mysqli);
$model -> F1();