wow*_*ick 3 php pdo global-variables
我刚刚开始将我的项目从mysql切换到PDO.在我的项目中,一个新的PDO对象或多或少地创建在程序的开头.
$dbh_pdo = new PDO("mysql:host=$db_url;dbname=$db_database_name", $db_user, $db_password);
Run Code Online (Sandbox Code Playgroud)
现在我想在一些函数和类中使用这个处理程序(是正确的名称吗?).有没有办法让对象像变量一样全局化,或者我尝试了一些难以言喻的愚蠢,因为我在搜索网页时找不到任何东西......
net*_*der 24
是的,你可以像任何其他变量一样使对象变为全局:
$pdo = new PDO('something');
function foo() {
global $pdo;
$pdo->prepare('...');
}
Run Code Online (Sandbox Code Playgroud)
您可能还想查看Singleton模式,它基本上是全局的OO风格.
话虽这么说,我建议你不要使用全局变量.在调试和测试时,它们可能会很痛苦,因为很难分辨谁修改/使用/访问它,因为一切都可以.他们的使用通常被认为是一种不好的做法 考虑稍微检查一下你的设计.
我不知道你的应用程序是什么样的,但是你说你这样做:
class TableCreator {
public function createFromId($id) {
global $pdo;
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE id = ?');
$stmt->execute(array($id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
你应该这样做:
class TableCreator {
protected $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function createFromId($id) {
$stmt = $this->pdo->prepare('SELECT * FROM mytable WHERE id = ?');
$stmt->execute(array($id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于TableCreator此处的类需要PDO对象才能正常工作,因此在创建实例时将其传递给它是完全合理的.
| 归档时间: |
|
| 查看次数: |
26366 次 |
| 最近记录: |