PHP天坑你懂得,不断总结中。。。
语言结构
语言结构不是函数,你可以把它理解为和 if
、while
等价。由于少了一层解析,所以速度更快!
技巧:
isset() vs strlen() - a fast/clear string length calculation
注意:
参数中不能再有运算,错误的用法 echo(1 + 2)
。
echo()
print()
die()
isset()
unset()
include() //注意,include_once()是函数
require() //注意,require_once()是函数
array()
list()
empty()
empty
如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、“0”、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。 除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。参见转换为布尔值获取更多信息。
也就是说,下面的东西被empty返回真
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
所以,如果你需要的变量非’空',之前如果你这样写
if(isset($_POST['passwd'] && $_POST['passwd'])){
...
}
// 可以替换为
if(!empty($_POST['passwd'])){
...
}
特别注意
5.4.0起,检查字符的非数字偏移量将会返回 TRUE。
$expected_array_got_string = 'some string';
//5.3全FALSE
var_dump(empty($expected_array_got_string['some_key'])); //5.4 TRUE
var_dump(empty($expected_array_got_string[0])); //FALSE
var_dump(empty($expected_array_got_string['0'])); //特殊 FALSE
var_dump(empty($expected_array_got_string[0.5])); //FALSE
var_dump(empty($expected_array_got_string['0.5'])); //5.4 TRUE
var_dump(empty($expected_array_got_string['0 Mostel'])); //5.4 TRUE
isset
检测变量是否设置,并且不是 NULL,可以接多个变量。
$foo = NULL;
var_dump(isset($foo)); // FALSE
5.4.0起,检查字符的非数字偏移量将会返回 FALSE,结果与
empty
相反。
$expected_array_got_string = 'some string';
//5.3全TRUE
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
安全检查
有些教程告诉你用户输入的变量需要过滤,以POST为例
$_POST = array_map('trim', $_POST)
但是你有没有考虑过这个表单?
<form method="POST" action="" accept-charset="utf-8">
<p>
<label>first_field</label><br />
<input type="text" id="first_field" name="field[1][points]" /><br />
<input type="radio" value="inside" name="field[1][group]" checked /><br />
<input type="radio" value="outside" name="field[1][group]"><br />
</p>
<p>
<label>second_field</label><br />
<input type="text" id="second_field" name="field[2][points]" /><br />
<input type="radio" value="inside" name="field[2][group]" checked /><br />
<input type="radio" value="outside" name="field[2][group]"><br />
</p>
</form>
正确的姿势需要你慢慢体会,老高在此给一些参考,围绕着关键词 php sanitize。
What’s the best method for sanitizing user input with PHP? Which is the best way to sanitize user input in PHP?
== 比较运算符
这个就更精彩了,不过存在即合理,建议多看看手册 - 比较运算符