提问人:hotcheetofingers 提问时间:6/6/2022 更新时间:6/6/2022 访问量:30
PHP基础:全局变量和引用
PHP Basics: Global variables & references
问:
我不确定我在这里错过了什么;我试图了解基本面。
目标是构建一个以 string 开头的函数,将其转换为小写,然后将其反转为 。然后使用内置函数将其在垂直列中打印 10 倍,如下所示:Smith
smith
htims
str_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
变量作为全局变量并为其重新分配一个新值,无论我尝试过什么方式都没有奏效。
答:
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
更多的是关于何时增加价值。如果将其添加为参数的一部分,则它也将被处理 - 并被视为要反转的字符串的一部分。
评论
&
(&$lname)