PHP基础:全局变量和引用

PHP Basics: Global variables & references

提问人:hotcheetofingers 提问时间:6/6/2022 更新时间:6/6/2022 访问量:30

问:


我不确定我在这里错过了什么;我试图了解基本面。

目标是构建一个以 string 开头的函数,将其转换为小写,然后将其反转为 。然后使用内置函数将其在垂直列中打印 10 倍,如下所示:Smithsmithhtimsstr_repeat()

htims
htims
htims
htims
...
x10

这是我得到的:

01 function reverseString(&$lname)
02 {
03   $lname = "Smith"; // Starting off with Smith
04   $lname = strtolower($lname); // Lowercases Smith into smith
05   return strrev($lname); // Reverses smith into htims
06 }
07 
08 echo reverseString($lname); // Testing my function = success. Prints htims.
09 echo "\n \n"; // Added line break. Now to try to use a built-in function to print it 10x..
10 echo str_repeat(reverseString($lname), 10); // Prints htimshtimshtimshtimsh .. x10

目前为止,一切都好。

现在我想在重复的字符串之间添加一个换行符,而不是打印 ..x10 它打印:htimshtimshtimshtimsh

htims
htims
htims
...
x10

这就是我被卡住的地方。

尝试 #1

我无法连接函数参数:

echo str_repeat(reverseString($lname . "\n"), 10); // Does not print. Fine, I'm assuming it's not appropriate syntax.

尝试 #2

在最后一个回显之前,我无法在函数之外重新分配值:$lname

10 $lname = $lname . "\n";
11 echo str_repeat(reverseString($lname), 10); // Does not print. Assuming because the variable does not have global scope.

尝试 #3

因此,我尝试在函数中先创建一个全局变量:$lname

01 function reverseString(&$lname)
02 {
03   global $lname; // Tried giving $lname global scope
04   $lname = "Smith";
05   $lname = strtolower($lname);
06   return strrev($lname);
07 }

...

10 $lname = $lname . "\n"; // But reassignment outside of the function STILL does not work.
11 echo str_repeat(reverseString($lname), 10); // Does not print.

最后的努力尝试 #4

我尝试在函数之外提供全局范围以达到很好的效果。也没有用:

01 function reverseString(&$lname)
02 {
04   $lname = "Smith";
05   $lname = strtolower($lname);
06   return strrev($lname);
07 }
08
09   global $lname; // Tried giving $lname global scope

解决方法

在函数中添加换行符是有效的,但我必须将它们放在我的字符串之前,因为最终它将被反转:

01 function reverseString(&$lname)
02 {
03   $lname = "\nSmith"; // Option 1
04   $lname = strtolower("\n" . $lname); // Option 2
05   return strrev("\n" . $lname); // Option 3
06 }

我想知道的是,为什么尝试$lname变量作为全局变量并为其重新分配一个新值,无论我尝试过什么方式都没有奏效。

PHP 全局变量 按引用传递

评论

0赞 mardubbles 6/6/2022
如果你无论如何都要返回一个值,为什么要在这里使参数可变?&(&$lname)
0赞 Community 6/6/2022
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

1赞 Nigel Ren 6/6/2022 #1

您可以做的是在从函数中获取值后添加新行。

echo str_repeat(reverseString($lname) . "\n", 10);

评论

0赞 hotcheetofingers 6/6/2022
知道我可能缺少全局变量吗?
0赞 Nigel Ren 6/6/2022
更多的是关于何时增加价值。如果将其添加为参数的一部分,则它也将被处理 - 并被视为要反转的字符串的一部分。