2010-10-26 102 views
0

多年來,我已經做了這樣的事情:可變範圍和職能

的config.php

<?php 

    $db = array("user" => "username", "pass" => "password"); 

的functions.php

<?php 
    require_once('config.php'); 
    function connectToDatabase() { 
     $dbc = new PDO($dsn, $db['user'], $db['pass']); 
     // Do some stuff ... 
    } 

我剛讀PHP手冊和SHOULDNT的工作,但多年來它已經。是否有任何服務器配置允許它工作?

我剛剛編寫了一個新的腳本並獲取錯誤。 $ db數組甚至沒有初始化。

回答

0

這實際上應該不會工作,即使在舊版本的PHP版本中,也不要在register_globals之間。

要將全局變量導入函數,您需要一個global $varname;語句,或將該變量傳遞給該函數(通常優選爲globals are bad)。唯一的例外是超全球。

你1000%肯定它不是這個樣子的:

function connectToDatabase() { 
     require_once('config.php'); 
     $dbc = new PDO($dsn, $db['user'], $db['pass']); 
     // Do some stuff ... 
    } 

+0

我只是檢查我的一些腳本,他們包含我的原始示例。我有一個專用的centos服務器,我自己配置​​了一段時間。這就是我主持所有客戶的工作。我知道這似乎很奇怪,甚至是不可能的,但直到今天,我一直在努力工作一個多小時,因爲它沒有工作。 – 2010-10-26 09:58:50

+0

@Jamie怪異!那麼@deceze所暗示的是我能想到的唯一解釋。 – 2010-10-26 09:59:43

3

事實上,在您的connectToDatabase功能開始處,有沒有變量在範圍內。您也應該收到關於未聲明的變量的警告。也許它的工作原因是你的數據庫安裝配置導致它使用默認的用戶名和密碼?

+3

如果這實際上是解釋,我特此正式聲明這種技術被稱爲*由serendipity *編程,或者,正如@Pekka應該理解的,* mehrGlückals Verstand *。 ;) – deceze 2010-10-26 10:03:35