php echo <<<eval变量计算问题

jackxiang 2009-10-10 15:45 | |
务必注意如下:
配对标记名的结尾标记名应单独一行,前后均不允许输出字符...(例如空格等不可见但存在的字符..)


开始:
<?php
$countwis = 21;
$ishper4 = 100;
$countwish4 = 128;
$countwishper4 = 666;
echo <<<EOF
</li> <li><span class="lb">其他:</span><span class="scale blue"><img src="images/vote_blue.gif" width=eval($countwishper4*2.35) height="8" /></span><span class="scalenum">{$countwish4}(({$countwishper4}%)</span></li> </ul>
EOF;


?>


run:

jackxiang@Tencent:~/php> /usr/local/php/bin/php eval.php
PHP Warning:  Module 'sockets' already loaded in Unknown on line 0
</li> <li><span class="lb">其他:</span><span class="scale blue"><img src="images/vote_blue.gif" width=eval(666*2.35) height="8" /></span><span class="scalenum">128((666%)</span></li> </ul>

why:
width=eval(666*2.35)

我是想让php计算出来给width的,为什么???

<?
if(test case)
print<<<EOT
<....html code....>
EOF;
else
print<<<EOT
<....html code....>
   EOF; //没有顶格写会报错:Parse error: syntax error, unexpected $end in
?>


如上写法是不可以的,需要把EOF标识符顶格:

<?
if(test case)
print<<<EOT
<....html code....>
EOF;
else
print<<<EOT
<....html code....>
EOF;
?>



补充上月票哥的:

<<<EOT,这个后面不能有空格
EOT;首先,要顶格,其次,分号后不能有空格。

定界符这个东西功能很强大,特别是在引用多行HTML代码的时候,方便了PHP的开发者,但其实他的使用很妖异【没装过PHP5.3,所以不知道新的有没有变化】

1、heredoc syntax 里面只能是文字,凡是涉及到的变量都会被解析

2、不要妄想在定界符内赋值、计算等,如果是变量的相乘,请在外面解析完了放进来。。。

3、大括号要注意着使用,无论如何,大括号内不要同时出现多个变量

4、定界符标志后面不能有任何空格,如 <<<EOT,EOT;,这两个符号后都不能有任何字符,EOT;就是占一行,谁也不能抢它

就想到这么多。以后想到再写

顺便说明一下,PHP的文件还是有规范的。。
点击在新窗口中浏览此图片
例如

1、空文件,一般代码为<?php,如果就这样写,肯定报错,最少在<?php后面得加一个空格

2、文件结尾,上面说的定界符,就是一例,如果文件正好是EOT;结尾,后面又没有 ?> ,文件绝对报错,所以必须要在EOT;后再敲一个回车。。。。

妖啊。。实在是妖啊。。



彪哥的url:
http://www.neatcn.com/show-924-1.shtml

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2042/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-9-7 18:52
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]