在php中,逗号要比点号快,究竟原因有几何呢?本文将为大家一一说来。
先看代码:
<?php echo 'abc'.'def'; //用点号连接字符串 echo 'abc','def'; //用逗号连接字符串 //by www. ?>
通过实例了解下php中逗号与点号的区别。
代码:
echo '1+5=' . 1+5;
看看上面的.输出的结果是6..而不是1+5=6.有些神奇吧?
一个神奇的例子:
echo "1+5=" . 5+1; //输出2
把5和1换下位置.结果就变成2了.
为什么会这样.难道在PHP中加法是没有交换律的?当然不是..
我们先不去想为什么.如果我把上面的点号换成逗号试下.
echo '1+5=' , 5+1; //输出 1+5=6
echo '1+5=' , 1+5; //输出 1+5=6
可以看出.只有使用逗号才可以得到意料中的结果.
那为什么点号就不行呢?逗号为什么就行呢?
echo ('1+5' . 5)+1; //输出2
给前面的加个括号后.得到的结果是一样的。
证明PHP是先连接字符串再进行加法计算了,按照从左向右的方向进行的。
既然是先连接的字符串.那么就应该是"1+55"了.然后再用这个字符串加上1.那为什么就会输出2呢?
这个跟PHP中字符串变成数字的机制是相关的。
来看下面的例子:
echo (int)'abc1'; //输出0 echo (int)'1abc'; //输出1 echo (int)'2abc'; //输出2 echo (int)'22abc'; //输出22
从上例可以看出:
如果将一个字符串强制转换成一个数字,PHP会去搜索这个字符串的开头,如果开头是数字就转换,如果不是就直接返回0。
回到刚才的1+55,既然这个字符串是1+55,所以强制类型转换后就应该是1了,在此基础上加1,当然是2了。
验证一下:
echo '5+1=' . 1+5; //输出10 echo '5+1=' . 5+1; //输出6 echo '1+5=' . 1+5; //输出6 echo '1+5=' . 5+1; //输出2
证明是正确的.
那么为什么使用逗号就没有上面的问题了呢?
手册上说了.用逗号是multiple parameters.
也就是说是多参数,即逗号分隔开的就相当于是N个参数.也就是说把echo当个函数用.
如此,echo会对每个参数先进行计算,最后再进行连接后输出,因此用逗号则不存在以上问题。
php addslashes() 递归反斜线引用字符串,代码如下:
<?php //addslashes递归 function addslashes_deep($value) { //史上最经典的递归,一行搞定 return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value); } //测试数据 $_POST['STR'] = "'fanglor ' is \ a boy >'"; $_GET['STR1'] = 'fanglor " is \ a boy >'; echo '当前get_magic_quotes_gpc为 '.get_magic_quotes_gpc(); echo "<br/>"; //判断当前是否开启get_magic_quotes_gpc //by www. if (!get_magic_quotes_gpc()){ $_POST = addslashes_deep($_POST); $_GET = addslashes_deep($_GET); $_COOKIE = addslashes_deep($_COOKIE); } //打印结果 var_dump ($_POST); echo "<br/>"; var_dump ($_GET); ?>
打印结果:
array(1) { ["STR"]=> string(30) "\'fanglor \' is \\ a boy >\'" }
array(1) { ["STR1"]=> string(26) "fanglor \" is \\ a boy >" }
php读取文件头判断文件类型,支持图片(jpg,gif,png)、rar、exe等后缀。
代码:
<?php //读取文件头来判断文件类型 //by www. $filename = "11.jpg"; //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, "rb"); $bin = fread($file, 2); //只读2字节 fclose($file); $strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ''; switch ($typeCode) { case 7790: $fileType = 'exe'; break; case 7784: $fileType = 'midi'; break; case 8297: $fileType = 'rar'; break; case 255216: $fileType = 'jpg'; break; case 7173: $fileType = 'gif'; break; case 6677: $fileType = 'bmp'; break; case 13780: $fileType = 'png'; break; default: echo'unknown'; } echo'这是一个'.$fileType.' file:'.$typeCode; ?>
示例:
<?php //方法二 //用mime_content_type函数判断文件类型 echo mime_content_type('11.gif') . "\n"; echo mime_content_type('22.php'); ?>