PHP函数将数据添加到字符串

时间:2011-03-30 21:06:06

标签: php string-building

我的代码:

$myText = "";

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

addText("Hello there...");

echo $myText;

预期输出:

  

你好......

$myText是空的。

为什么会这样?

9 个答案:

答案 0 :(得分:5)

您需要告诉函数使用全局变量$ myText

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

虽然在函数中使用全局变量被认为是有害的。

答案 1 :(得分:3)

试试这个:

$myText = "";

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

addText("Hello there...");

echo $myText;

你必须这样做的原因是bc $myText不在函数范围内。
所以要把它放在范围内,你必须告诉函数使用哪个全局变量

这是演示:http://codepad.org/DeH89No6

答案 2 :(得分:3)

好吧,让我实际上帮助你,而不是告诉你如何让你当前的例子工作。基本上,在自定义函数外部定义的变量在其中是不可见的。在您的示例中,您的函数不知道$ myText是什么,因为它是在函数范围的一侧声明的。要将变量传递给函数,您需要将它们作为参数添加 - 您在定义时通过函数传递的变量,然后在调用它时,例如:function addText($param1, $param2)

正如其他人所提到的,你可以允许函数使用global关键字查看某些变量,但只是真正用于抽象事物,如数据库连接,而不是你想要配置的实际数据,做所有这些在你的功能中。

希望这有助于您更多地理解PHP。

答案 3 :(得分:2)

这就是你所说的变量范围。这是代码的一部分,其中您的变量被称为解释here。 为了使短篇故事更短,即使函数内部的$ myText与外部的名称共享名称,它们也完全不同。它们是不同的盒子,一个在你的房间(你的功能内部)和一个外面(另一个)。即使它们被标记为相同,你放入其中一个的东西也不会出现在另一个内部。 有两种方法可以做你想做的事。

首先是简单但不好的方法:通过将全局关键字添加到函数内部,如之前发布的那样,将一个大的全部包括在框中。这就像是说“在外面找一个带有这个标签的盒子并使用这个标签。” 但请记住:全局变量很糟糕。

诱人的黑暗面可能是另一种方式...... 带上你的盒子......

$myText = "";

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

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

echo $myText;

愿来源与您同在。

答案 4 :(得分:0)

获取函数返回字符串

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

$ myText = addText('string');

答案 5 :(得分:0)

PHP变量范围与您可能习惯使用的其他语言的范围略有不同。为了使变量$myText在函数addText中可见,您必须使用global关键字:

$myText = "";

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

addText("Hello there...");

echo $myText;

或者,如果代码在类中,您可以使用关键字$this将$ myText设为类级变量:

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

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

答案 6 :(得分:0)

它与variable scope有关。基本上$myText之外的addText与函数内的$myText不同。您可以使用它将函数内部的变量设置为其外部的变量:

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

答案 7 :(得分:0)

再接受一次......

$myText = "The quick brown fox";

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

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

答案 8 :(得分:0)

函数的范围(变量的生命周期)不会到达函数外部。对于这个简单的任务,我不明白为什么你要做一个功能。但是,传递给函数的变量将被复制到函数作用域中,即使您将变量命名为相同也不会相同。为了能够检索函数之外的东西,你必须使用return语句。

(使用C ++,如果将函数的参数作为参考传递,则可以采用您的方法)

但是,您问题的可能解决方案可能是:

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

但同样,我没有看到为这个简单的任务创建函数的原因