2011-10-05 83 views
0

我打破了我的頭爲什麼最簡單的東西不工作。PHP全球變數

我只想要訪問在包含文件中聲明的變量。

我有一個名爲connection.php的文件,其中有一個名爲MySqlDatabase的類。在文件的底部,我創建的類的實例,並將其assiged變量名爲$數據庫

// filename database.php begin 

class MySqlDatabase(){ 

// code goes here 

} 

$database = new MySqlDatabase(); 

// filename database.php end 

現在我包括database.php中在something.php和試圖訪問$數據庫變量這樣

//something.php 
require_once 'database.php'; 

function foo(){ 

global $database; 

$sql = "some sql statement"; 
mysql_query($sql,$database->connection); 
//and remainig code goes here... 

} 

當我運行something.php時,預計全局變量$ database應該在函數foo()中可用,但它看起來像變量爲null,我用is_object()函數測試以檢查對象可用但它返回false。

爲了調試目的,我在database.php文件中添加了is_object()檢查,它返回true。

我也試圖訪問使用其他選項全局變量像

$database =& $GLOBALS['database']; 

但我仍然沒有運氣。然後我使用print_r()函數打印完整的$ GLOBALS數組,但它沒有$數據庫變量,我也使用get_defined_vars()進行檢查,但它也沒有變量。但我能夠看到他們在包含文件本身

我打破了我的頭,因爲兩天來使這個簡單的事情工作,但我妥協和複製粘貼數據庫連接代碼的所有文件。

+0

$ database並不是一個全局變量,因此您實際上只是在使用'foo()'函數時使變量$ database可用。我們可以看到完整的'MySqlDatabase()'類,那麼該類的實現將變得更加清晰。 – Luke

回答

1

只有3個可能的原因

  • $數據庫在全球範圍內沒有定義
  • database.php中被列入不作爲文件
  • 讀者看不見的一些錯字
1

如果已經包含的文件,然後使用以下命令:

//something.php 
require_once 'database.php'; 

    /* Function FOO starts a new scope and doesn't see database object declared in database.php 
    * Therefore, you pass on the database object from calling function and use that instead. 
    */ 

function foo($dbObj){  

    $sql = "some sql stagement"; 
    mysql_query($sql,$dbObj->connection); 
    //and remainig code goes here... 

} 

foo($database); 
2

我在你的代碼中做了一些改變,這個工作適合我。

database.php中

<?php 
// filename database.php begin 
class MySqlDatabase 
{ 
    public $connection; 
    function MySqlDatabase() 
    { 
     $this->connection= mysql_connect('HOST','USER','PASSWORD'); 
     mysql_select_db('databaseName',$this->connection); 
    } 
} 
$database = new MySqlDatabase(); 
// filename database.php end 
?> 

something.php

<?php 
require_once 'database.php'; 
function foo() 
{ 
    global $database ; 
    $sql = "select * from tableName"; 
    $rs=mysql_query($sql,$database->connection); 
    while($row=mysql_fetch_array($rs)) 
    { 
     print_r($row); 
    } 
    //and remainig code goes here... 
} 
foo(); 
?> 

你可能會操縱在錯誤的莊園$connection變量。

0

嗯,我想出了問題。問題在於amfphp框架。這個框架包含了我所有的文件(something.php)。它很難解釋它,但簡單地說,我將database.php包含在與amfphp框架相關的主要php文件之一中。

感謝您的建議。