[英]Use of included class in another class
我正在尝试使用数据库 class(PHP 的 ADOdb),但我不知道如何在另一个 class 中使用它。 例子:
<?php
include_once("adodb.inc.php");
$conn = NewADOConnection('mysql');
class Contacts {
public function getData(){
$conn->Connect(...);
//do something
}
}
?>
我认为问题在于我不能调用 $conn,因为它在 class 之外定义。
注意:未定义变量:conn
致命错误:在非对象上调用成员 function Connect()
也许我做错了,但我真的不知道如何解决这个问题。
有人可以帮我吗? 非常感谢!
您有多种选择:
使用全局保留字:
<?php
include_once("adodb.inc.php");
$conn = NewADOConnection('mysql');
class Contacts {
public function getData(){
global $conn;
$conn->Connect(...);
//do something
}
}
?>
或者在创建时将 $conn 传递给您的 object
$contacts = new Contacts($conn);
class Contacts {
protected $conn;
public function __construct($conn){
$this->conn = $conn;
}
public function getData(){
$this->conn->Connect(...);
//do something
}
}
?>
或者您可以使用 Singleton 数据连接 object。 但这被认为是一种反模式,所以我会像选项 2 一样注入您的依赖项。
为什么不简单地这样做呢?!
<?php
include_once("adodb.inc.php");
$conn = NewADOConnection('mysql');
$conn->Connect(...);
class Contacts {
protected $_connection;
public function __construct($conn)
{
$this->_connection = $conn;
}
public function getData(){
//do something
}
}
$contacts = new Contacts($conn);
$foobar = new FooBar($conn);
?>
在 class 外部建立连接是有意义的,然后传入已经可用的 object。 当然,在所有需要它的类之间共享相同的连接 object。
PS 我真的真的建议放弃 ADODB 并开始学习 PDO 。
您需要引用全局变量:
<?php
include_once("adodb.inc.php");
$conn = NewADOConnection('mysql');
class Contacts {
public function getData(){
global $conn;
$conn->Connect(...);
//do something
}
}
?>
也就是说,你可能会更好地使用这样的依赖注入:
<?php
class Contacts {
private $db;
public function setDB($conn) {
$this->db = $conn;
}
public function getData(){
if (!$this->db) {
throw new Exception();
}
$conn = $this->db;
$conn->Connect(...);
//do something
}
}
?>
然后在初始化部分中包含您的 adodb 包含和实例化。
编辑:请参阅这篇关于依赖注入的文章,因为养成使用它(而不是全局变量)的习惯可能会在以后省去很多麻烦。
$conn
不在您的变量 scope 中。 使用以下方法使其工作:
class Contacts {
public function getData(){
global $conn;
$conn->Connect(...);
//do something
}
}
另一种方法是引用 object 中的变量:
class Contacts {
private $ref;
public function __construct($conn)
{
$this->ref = $conn;
}
public function getData(){
$ref->Connect(...);
//do something
}
}
$contacts = new Contacts($conn);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.