我的代码:
$myText = "";
function addText($textString){
$myText .= $textString;
}
addText("Hello there...");
echo $myText;
预期输出:
你好......
$myText
是空的。
为什么会这样?
答案 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
不在函数范围内。
所以要把它放在范围内,你必须告诉函数使用哪个全局变量
答案 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;
但同样,我没有看到为这个简单的任务创建函数的原因