我的代码:
$myText = "";
function addText($textString){
$myText .= $textString;
}
addText("Hello there...");
echo $myText;
预期输出:
你好...
$myText
是空的。
为什么会这样?
我的代码:
$myText = "";
function addText($textString){
$myText .= $textString;
}
addText("Hello there...");
echo $myText;
预期输出:
你好...
$myText
是空的。
为什么会这样?
您需要告诉函数使用全局变量 $myText
function addText($textString){
global $myText;
$myText .= $textString;
}
尽管在函数中使用全局变量被认为是有害的。
试试这个:
$myText = "";
function addText($textString){
global $myText;
$myText .= $textString;
}
addText("Hello there...");
echo $myText;
你必须这样做的原因是 bc$myText
不在函数的范围内。
所以要把它放在范围内,你必须告诉函数要使用哪些全局变量
好的,让我真正帮助你,而不是仅仅告诉你如何让你当前的例子工作。基本上,在自定义函数之外定义的变量在其内部是不可见的。在您的示例中,您的函数不知道 $myText 是什么,因为它是在函数范围之外声明的。要将变量传递给函数,您需要将它们作为参数添加 - 在定义函数时以及调用函数时传递的变量,例如:function addText($param1, $param2)
.
正如其他人所提到的,您可以使用关键字允许函数查看某些变量global
,但仅将其真正用于抽象事物,例如数据库连接,而不是您要配置的实际数据,在您的函数中执行所有这些操作。
希望这将帮助您更多地了解 PHP。
这就是你所说的变量范围。这是您的变量被称为此处解释的代码部分。为了使短篇故事更短,即使您在函数内部的 $myText 与外部共享名称,它们也是完全不同的。它们是不同的盒子,一个在你的房间里(一个在你的功能里面),一个在外面(另一个)。即使它们的标签相同,您放入其中之一的东西也不会出现在另一个中。有两种方法可以做你想做的事。
首先是简单但不好的方法:通过将 global 关键字添加到之前发布的函数内部的那个来制作一个大的全包含框。这就像说“在外面寻找一个带有这个标签的盒子并使用这个。” 但请记住:全局变量是不好的。
诱人的黑暗面可能还有另一种方式...随身携带您的盒子...
$myText = "";
function addText($existingText, $textToAdd) {
return $existingText . $textToAdd;
}
addText($myText, "Look, it's there!");
echo $myText;
愿源与你同在。
获取返回字符串的函数
function addText($textString){
$myText .= $textString;
return $myText
}
$myText = addText('string');
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;
}
}
它与变量范围有关。基本上$myText
外部与功能内部addText
不同$myText
。您可以使用它来将函数内部的变量设置为函数外部的变量:
function addText($textString){
global $myText;
$myText .= $textString;
}
只是另一种看法...
$myText = "The quick brown fox";
echo addText(" jumped over the lazy dog.", $myText);
function addText($addString,$toVar) {
$newString = $toVar.$addString;
return $newString;
}
函数的作用域(变量的生命周期)没有到达函数之外。对于这个简单的任务,我不明白你为什么要创建一个函数。但是,传递给函数的变量会被复制到函数作用域中,即使您将变量命名为相同,它也不会相同。为了能够在函数之外检索某些内容,您必须使用 return 语句。
(对于 C++,如果函数的参数作为引用传递,您的方法将是可能的)
但是,您的问题的可能解决方案可能是:
function addText($text){
return $text;
}
$myText .= addText("Hello there");
echo $myText;
但同样,我看不出为这个简单任务创建函数的原因