我正在学习php,而且代码严格用于我的教育,所以我不是在寻找“更好”的方法。
当我翻阅语言时,我正在尝试所有内容,并创建了我正在尝试的文档。我发现了echo和print命令的一些奇怪的行为,并想知道:
1)我真的需要3行打印“2 + 3 = 5”
2)真正发生了什么?为什么我在示例#2中得到6?
示例1 - 不起作用,似乎无论我做什么都要评估。单引号,双引号甚至逃避加号(“2 / + 3”)都不起作用。
echo('2 + 3 = '.$var1 + $var2.'<br>');// 5
echo("2 + 3 = ".$var1 + $var2.'<br>');// 5
echo('2 /+ 3 /= '.$var1 + $var2.'<br>');// 5
示例2 - 现在它变得奇怪,因为我得到6.如果我将3更改为4我得到7所以它几乎像“3 =”= 1和“4 =”= 2然后隐式地添加到以下但是我怀疑。
echo("2 + ");
echo(" 3 = ".$var1 + $var2.'<br>');// 2 + 6?
echo("2 + ");
echo(" 4 = ".$var1 + $var2.'<br>');// 2 + 7??
示例3 - 我真的需要3行来完成我的任务吗? strating让我想起了Fortran。
echo("2 + ");
echo(" 3 = ");
echo($var1 + $var2.'<br>');// 2 + 3 = 5
为了帮助清除var1 = 2和var2 = 3,这些值无关紧要。我只是试图附上一个文字和一个评估的exprerssion。
我希望代码回显'2 + 3 ='。$ var1 + $ var2。'
'导致'2 + 3 = 5',但我得到的只是5或2 + 3 = 2 + 3。
为什么这里只有一个5?
echo('2 + 3 = '.$var1 + $var2.'<br>');// 5
为什么不评估第二个表达式?
echo('2 + 3 = '."$var1 + $var2".'<br>');// 2 + 3 = 2 + 3
答案 0 :(得分:1)
首先让我们来看看单引号和双引号。假设我们有以下变量:
$var1 = 1;
如果我们用单引号或双引号回显此变量:
echo "$var1"; //result: 1
echo '$var1'; //result: $var1
因此双引号将回显该值,而单引号将简单地回显文字变量名称,就像它只是一个字符串一样。
现在让我们看看示例1.在这种情况下,你使用什么类型的引号或转义字符(这是反斜杠:\而不是正斜杠:/)并不重要,因为你&# 39;不要回显引号内的变量:
echo "string" . $var1 + $var2 . "more strings";
如您所见,$var1
和$var2
不在引号之内。它们只是通过点.
字符添加到它中。因此,如果我们修改示例1,结果会有所不同:
echo '2 + 3 = $var1 + $var2<br>'; //result: 2 + 3 = $var1 + $var2
echo "2 + 3 = $var1 + $var2<br>";//result: 2 + 3 = 5
echo '2 /+ 3 /= $var1 + $var2<br>';//result: 2 /+ 3 /= $var1 + $var2
在最后一次回声中,尝试逃避加号和/或等号是完全没有意义的。 PHP中的转义字符是一种防止字符串提前结束或确保返回正确的字符串信息的技术。例如:
echo 'John's Car'; //This will return an error
echo 'John\'s Car'; //This will work perfectly fine
在第一种情况下,PHP注意到字符串中的第二个单引号。它假设我们在那里结束我们的字符串,而我们在字符串中添加一个文字引号。转义字符告诉PHP我们想在字符串中放入一个引号而不是在那里结束它。
不幸的是,我无法帮助您使用示例2,因为如果没有$var1
和$var2
的值,您的问题就无法重复。
在示例3中回答您的问题:不,您不会。这也可以很好地完成:
echo "2 + 3 = " . $var1 + $var2 . "<br>";
希望我为您做了一些更清楚的事情。请记住,虽然这个网站更多的是针对特定问题而不是对您的教育的额外解释。如果您不了解某些内容,请咨询您的老师或找一个更适合此问题的论坛。如果您遇到特定问题,我们会在这里为您服务!
答案 1 :(得分:1)
正如安德烈指出的那样,这是因为行动的顺序。我找到了this page,特别是:
谨慎之处 - 点运算符与+和 - 具有相同的优先级,这可能会产生意外结果。
示例:
<php
$var = 3;
echo "Result: " . $var + 3;
?>
上面将打印出“3”而不是“Result:6”,因为首先创建字符串“Result3”,然后将其添加到3,产生3个非空非数字字符串转换为0。
要打印“结果:6”,请使用parantheses改变优先级:
<php
$var = 3;
echo "Result: " . ($var + 3);
?>
所以我的解决方案是:
echo '2 + 3 = '.($var1 + $var2).'<br>'; //result: 2 + 3 = 5