2

我的代码:

$myText = "";

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

addText("Hello there...");

echo $myText;

预期输出:

你好...

$myText是空的。

为什么会这样?

4

9 回答 9

5

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

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

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

于 2011-03-30T21:07:53.047 回答
3

试试这个:

$myText = "";

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

addText("Hello there...");

echo $myText;

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

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

于 2011-03-30T21:07:11.167 回答
3

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

正如其他人所提到的,您可以使用关键字允许函数查看某些变量global,但仅将其真正用于抽象事物,例如数据库连接,而不是您要配置的实际数据,在您的函数中执行所有这些操作。

希望这将帮助您更多地了解 PHP。

于 2011-03-30T21:11:57.550 回答
2

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

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

诱人的黑暗面可能还有另一种方式...随身携带您的盒子...

$myText = "";

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

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

echo $myText;

愿源与你同在。

于 2011-03-30T21:22:52.067 回答
0

获取返回字符串的函数

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

$myText = addText('string');

于 2011-03-30T21:08:25.403 回答
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;
   }
}
于 2011-03-30T21:09:44.280 回答
0

它与变量范围有关。基本上$myText 外部与功能内部addText不同$myText。您可以使用它来将函数内部的变量设置为函数外部的变量:

function addText($textString){
    global $myText;
    $myText .= $textString;
}
于 2011-03-30T21:11:28.620 回答
0

只是另一种看法...

$myText = "The quick brown fox";

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

function addText($addString,$toVar) {
    $newString = $toVar.$addString;
    return $newString;
} 
于 2011-03-30T21:16:50.957 回答
0

函数的作用域(变量的生命周期)没有到达函数之外。对于这个简单的任务,我不明白你为什么要创建一个函数。但是,传递给函数的变量会被复制到函数作用域中,即使您将变量命名为相同,它也不会相同。为了能够在函数之外检索某些内容,您必须使用 return 语句。

(对于 C++,如果函数的参数作为引用传递,您的方法将是可能的)

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

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

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

于 2011-03-30T21:16:50.983 回答