2011-03-30 36 views
2

我的代碼:PHP函數將數據添加到字符串

$myText = ""; 

function addText($textString){ 
    $myText .= $textString; 
} 

addText("Hello there..."); 

echo $myText; 

預期輸出:

你好......

$myText是空的。

爲什麼會發生這種情況?

回答

3

試試這個:

$myText = ""; 

function addText($textString){ 
    global $myText; 
    $myText .= $textString; 
} 

addText("Hello there..."); 

echo $myText; 

你必須做的原因是BC $myText不是在功能範圍。
所以把它的範圍,你要告訴全局變量使用

這裏該功能的演示:http://codepad.org/DeH89No6

5

你需要告訴函數使用全局變量$會將myText

function addText($textString){ 
    global $myText; 
    $myText .= $textString; 
} 

儘管在函數中使用全局變量被認爲是有害的。

0

得到函數返回字符串

function addText($textString){ 
    $myText .= $textString; 
    return $myText 
} 

會將myText $ = addText( '字符串');

+2

他想追加到'全局'$ myText',如果函數無法讀取它,返回它將無濟於事。 – 2011-03-30 21:10:52

0

PHP變量作用域與您可能習慣的其他語言的作用域略有不同。爲了使變量$myText是功能addText內可見,必須使用global關鍵字:

$myText = ""; 

function addText($textString){ 
    global $myText; //added this line 
    $myText .= $textString; 
} 

addText("Hello there..."); 

echo $myText; 

或者,如果代碼是一個類裏面,你可以做$會將myText使用一個類級變量關鍵字$this

class SomeClass{ 
    function __init__(){ 
     $this->myText = ""; 
    } 
    function addText($textString){ 
     $this->myText .= $textString; 
    } 

    function someFunction(){ 
     $this->addText("Hello there..."); 
    echo $this->myText; 
    } 
} 
0

它與variable scope做。 addText以外的$myText基本上不同於$myText裏面的函數。你可以使用這個函數內部的變量設置爲它的一個外:

function addText($textString){ 
    global $myText; 
    $myText .= $textString; 
} 
3

好吧,讓我真正幫助你,而不是僅僅告訴你如何讓你的當前示例工作。基本上,在自定義函數之外定義的變量在其內部是不可見的。在你的例子中,你的函數不知道$ myText是什麼,因爲它被聲明在函數作用域之外。要將變量傳遞給函數,您需要將它們作爲參數添加 - 您在定義函數時通過函數傳遞的變量,然後在調用它時傳遞該變量,例如:function addText($param1, $param2)

正如其他人所說,你可以讓功能通過使用global關鍵字看到某些變量,但只有真正使用這個像數據庫連接抽象的東西,而不是你要配置的實際數據,做一切自己的函數中。

希望這會幫助你更多地理解PHP。

0

又一個採取它...

$myText = "The quick brown fox"; 

echo addText(" jumped over the lazy dog.", $myText); 

function addText($addString,$toVar) { 
    $newString = $toVar.$addString; 
    return $newString; 
} 
0

的功能範圍(變量續航時間)不會在函數外到達。對於這個簡單的任務,我不明白你爲什麼做一個功能。但是,傳入函數的變量會被複制到函數作用域中,即使您將該變量命名爲相同也不會相同。爲了能夠在函數外部檢索某些內容,必須使用return語句。

(用C++,你的做法將是可能的,如果該參數的函數的引用傳遞)

但是,一個可能的解決方案,您的問題可能是:

function addText($text){ 
    return $text; 
} 
$myText .= addText("Hello there"); 
echo $myText; 

但同樣,我沒有看到爲此簡單任務製作功能的原因

2

這就是您所稱的變量範圍。這是代碼的一部分,其中的變量已知爲here。 爲了使短小的故事更短,即使函數中的$ myText與外部的名稱共享名稱,它們也完全不同。他們是不同的盒子,一個在你的房間裏(一個在你的功能裏面),另一個在外面(另一個)。即使他們被貼上相同的標籤,你放入其中的東西也不會出現在另一個內部。 有兩種方法可以做你想做的事情。

首先簡單但不好的方法:把一個大的所有包括在內的函數添加到前一個函數內部的全局關鍵字中。這就像是說:「看看外面有這個標籤的盒子,然後使用這個標籤。」 但請記住:全局變量是壞的。

誘人的,因爲黑暗的一面可能是有一個別的辦法...... 以你的框,你...

$myText = ""; 

function addText($existingText, $textToAdd) { 
    return $existingText . $textToAdd; 
} 

addText($myText, "Look, it's there!"); 

echo $myText; 

可以在源極與你同在。