Да, вы можете сделать объекты глобальными, как и любую другую переменную:
$pdo = new PDO('something');
function foo() {
global $pdo;
$pdo->prepare('...');
}
Возможно, вы также захотите проверить шаблон 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
}
}
}
Вы должны сделать что вместо этого:
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
}
}
}
Поскольку класс TableCreator
здесь требует, чтобы объект PDO работал должным образом, имеет смысл передать его ему при создании экземпляра.