2013-02-20 17 views
0

我試圖執行這個PHP程序,但我得到了意想不到的輸出。
獲取意外的輸出,同時給全局變量賦值php

<?php 
$abc; 
function test(){ 
    $abc="world"; 
} 
test(); 
echo "hello ".$abc;?> 

Output : hello
Expected output : hello world

我是新來的PHP。請任何人告訴我我在這段代碼中犯了什麼錯誤。
我知道如果我將$abc="world"置於function test()的範圍之外,它將起作用。
我該怎麼做才能從函數中爲全局變量賦值?

+1

http://php.net/manual/en/language.variables.scope.php – PeeHaa 2013-02-20 19:16:35

+1

這是,事實上,預期輸出 – Achrome 2013-02-20 19:17:50

回答

2

可以定義$abc類裏面,然後用$this訪問它。

<?php 
    class xyz { 
    public $abc = ''; 
    function test(){ 
    $this->abc = "world"; 
    } 
} 

$a = new xyz(); 
$a->test(); 
echo "hello ". $a->abc; 
?> 

Demo

1

使用全局變量通常被認爲是不好的做法,但您可以使用global關鍵字來執行此操作。

<?php 
$abc; 
function test(){ 
    global $abc; 
    $abc="world"; 
} 
test(); 
echo "hello ".$abc;?> 
+0

難道誰downvoted這個解釋爲什麼嗎?這是正確的答案,我表示依賴全局變量是不好的做法。 – ChrisC 2013-02-20 19:20:59

1

$abc in test是本地的。如果你想訪問全局變量,你必須在你的函數中使用global $abc來指定它。

看到here

1

你需要告訴您要使用像這樣的全球$ ABC變量的PHP編譯:

$abc; 
function test() { 
    global $abc; 
    $abc="world"; 
} 
test(); 

因爲在PHP變量的作用域是的JavaScript的不同,例如,因爲你可能已經從那裏越過了。

函數中定義的任何變量在PHP中自然都是該函數的私有變量。

1

您在test()中編輯的$ abc是與全局不同的$ abc。要解決你的代碼,你想要的方式:

<?php 
$abc; 
function test(){ 
    global $abc; 
    $abc="world"; 
} 
test(); 
echo "hello ".$abc; 
?> 
+1

哇,有人去了並且低估了所有的全球$ abc答案?這是成熟的。 – DiMono 2013-02-20 19:21:34