只是爲了回答你在評論中提出的問題。在現代編程中,最好的做法是使用dependency injection來處理像你這樣的情況。此外,使用容器更實用。在現代的面向對象的框架中,總是有一個服務管理器,它充當一個容器並提供你需要的所有東西。
class DiContainer {
protected $instances = [];
public function __construct(array $aInstances = []) {
$this->instances = $aInstances;
}
public function set($sName, $oInstance) {
if (isset($this->instances[$sName]) {
throw new \Exception(sprintf(
'An instance for "%s" already exists'
$sName
));
}
$this->instances[$sName] = $oInstance;
}
public function get($sName) {
if (!isset($this->instances[$sName)) {
throw new ErrorException(sprintf(
'No instance for "%s"',
$sName
));
}
return $this->instances[$sName];
}
}
這是依賴容器。您可以將您的應用程序所需的所有實例存儲在其中。請記住,這是一個未經測試的小例子,它顯示了依賴注入的好處。你不應該以有效的方式使用它,因爲DI容器比這個簡單的例子更加完善。
實際上,您可以在下面的示例中使用它。
// when you instanciate your application
$oContainer = new DiContainer([
'db-connection' => new PDO(...),
]);
// in your specific class
public function doSomethingWithDatabase(DiContainer $oContainer) {
$oDbHandle = $oContainer->get('db-connection');
...
}
自己測試一下。只需在你的php腳本的末尾添加一個'var_dump($ conn);'。您始終會建立一個新的PDO實例,用於覆蓋之前創建的實例。所以在'myFunc()'函數結束之前總會有一個單獨的PDO連接。 – Marcel
好的謝謝。此外,這是最佳做法,還是應該每頁使用一個PDO連接並將連接對象傳遞給函數? – mang