Я только начал переводить свой проект из mysql в PDO. В моем проекте новый объект PDO создается более или менее правильно в начале программы.
$dbh_pdo = new PDO("mysql:host=$db_url;dbname=$db_database_name", $db_user, $db_password); 
Теперь я хотел бы использовать этот обработчик (это правильное имя?) В некоторых функциях и классах. Есть ли способ сделать объекты глобальными, как переменные, или я пытаюсь сделать что-то невыразимо глупо, потому что я не мог найти ничего при поиске в Интернете …
Да, вы можете сделать объекты глобальными, как и любая другая переменная:
 $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 работал правильно, имеет смысл передать его ему при создании экземпляра. 
  Вы будете использовать $GLOBALS['dbh_pdo'] вместо $dbh_pdo внутри любых функций.  Или вы можете использовать ключевое слово global и использовать $dbh_pdo (то есть global $dbh_pdo ). 
Вы также можете попробовать использовать Singleton, чтобы передать вам объект PDO. Таким образом, у вас будет только один объект PDO (и одно соединение с базой данных) в любом запросе, который сохраняет ресурсы памяти / сервера.