2012-03-12 21 views
0

私はPHP関数からグローバル変数にアクセスしようとすると、未定義の変数エラーが発生するのはなぜですか?

<?php 

    global $server ,$username ,$password ,$database; 
    $server ="localhost:3306"; 
    $username="user"; 
    $password="pass"; 
    $database="dbname"; 

    function connectToDB() 
    { 
    mysql_connect($server,$username,$password) or die ("can't connect to server"); 
    mysql_select_db($database) or die ("can't select database"); 
    } 
?> 

に次のようなコードを書いたが、私は私の問題が何であるかを私の関数の中でこれらの変数にアクセスすることはできませんよ?

グローバルキーワードがなくても、これらの変数にアクセスすることはできません。あなたは、変数を宣言する必要が

答えて

4

globalは、「すべての関数で、この変数を使用可能にします」ではなく「グローバルスコープからこの変数を取得します」を意味します。関数の中で使うのではなく、関数の中で使う。

は、彼らがバグを追跡するのは難しい作成し、予期しない場所で変更することができるよう、グローバル変数を使用することをお勧めではありませんexample in the documentation

<?php 

    $server ="localhost:3306"; 
    $username="user"; 
    $password="pass"; 
    $database="dbname"; 

    function connectToDB() 
    { 
    // Global used INSIDE function 
    global $server ,$username ,$password ,$database; 
    mysql_connect($server,$username,$password) or die ("can't connect to server"); 
    mysql_select_db($database) or die ("can't select database"); 
    } 
?> 
+0

+1 – Sarfraz

3

global INSIDE機能:

function connectToDB() { 
    global $server, $username, $password, $database; 
    etc... 
} 
1
<?php 
function connectToDB() 
    { 
    global $server ,$username ,$password ,$database; 

    $server ="localhost:3306"; 
    $username="user"; 
    $password="pass"; 
    $database="dbname"; 

    mysql_connect($server,$username,$password) or die ("can't connect to server"); 
    mysql_select_db($database) or die ("can't select database"); 
    } 
?> 
2

を参照してください。より良い方法は、このようなあなたの関数に必要な変数を渡すことです: - OPのための `はGlobal`キーワードのより良い説明のため

$server ="localhost:3306"; 
$username="user"; 
$password="pass"; 
$database="dbname"; 

connectToDB($server, $username, $password, $database); 

function connectToDB($server, $username, $password, $database) 
{ 
    mysqli_connect($server,$username,$password) or die ("can't connect to server"); 
    mysqli_select_db($database) or die ("can't select database"); 
} 
関連する問題