显示行号
|
选择喜欢的代码风格
默认
GitHub
Dune
LakeSide
Plateau
Vibrant
Blue
Eighties
Tranquil
PHP 是一门庞大的语言,各个水平层次的开发者都可以利用它进行迅捷高效的开发。然而在对语言逐渐深入的学习过程中,我们往往会因为走捷径和/或不良习惯而忘记(或忽视掉)基础的知识。为了帮助彻底解决这个问题,这一章的目的就是提醒开发人员注意有关 PHP 的基础编程实践。
$a = 5; // 5 是个整型 integer
var_dump($a == 5); // 比较数值; 返回 true
var_dump($a == '5'); // 比较数值; (忽略类型); 返回 true
var_dump($a === 5); // 比较类型/数值; (整型 vs. 整型); 返回 true
var_dump($a === '5'); // 比较类型/数值; (整型 vs. 字符串); 返回 false!
//Equality comparisons
if (strpos('testing', 'test')) { // 'test' 在位置 0 找到, 而 0 在布尔类型里被解释成了 'false'
// code...
}
// vs. 严格比较
if (strpos('testing', 'test') !== false) { // (0 !== false), 用 === 严格比较,返回true
// code...
}
比较运算符
在PHP中运用比较运算符,经常容易被大家被忽视一些问题,经常导致许多意想不到的结果。 其中一个问题源于严格的比较(将布尔值作为整数进行比较),撸代码说明:
推荐在PHP官网中更多阅读:
If 条件判断
在函数或类方法中使用“if / else”语句时,有一种常见的误解,即“else”必须结合使用。 实际上,如果结果是定义返回值,'else'不是必需的,因为'return'将结束该函数,即便写虽然没错,但导致'else'变得没有更多的实际意义,比如:
function test($a)
{
if ($a) {
return true;
} else {
return false;
}
}
// vs.
function test($a)
{
if ($a) {
return true;
}
return false; // else 在这里并不需要了
}
// 简写可以这样:
function test($a)
{
return (bool) $a;
}
推荐在PHP官网中更多阅读:
Switch 语句
Switch 判断是个不错的结构,但用的时候,有几个坑需要注意:
Switch 只比较数值,而不比较类型,记得上面说的例子吗? (对,等同于 ‘==’)
Switch 里的Case会一个个的去比较,直到找到匹配为止。 如果未找到匹配项,则使用默认值(如果已定义 default)
如果没有 ‘break’, 会不停的继续,直到遇到 break 才返回
在函数中,使用'return'可以直接返回,不会一直去找到 'break' 才停止
上面说的可能有点拗口,还是直接上代码解释:
$answer = test(2); // 将从 'case 2' 和 'case 3' 一直执行,因为case 2里没有break..
function test($a)
{
switch ($a) {
case 1:
// code...
break; // break 用来停止 switch 结构
case 2:
// code... // 如果没有 break, 将到下一个比较 'case 3'
case 3:
// code...
return $result; // 在一个 function 函数里, 'return' 将直接结束返回
default:
// code...
return $error;
}
}
推荐更多阅读:
PHP中比较 0、false、null 和 '' 的坑
除非你真的知道你在用==比较什么,一般情况用===更安全。
测试代码:
//test.php
echo '0 == false: ';
var_dump(0 == false);
echo '0 === false: ';
var_dump(0 === false);
echo "\n";
echo '0 == null: ';
var_dump(0 == null);
echo '0 === null: ';
var_dump(0 === null);
echo "\n";
echo 'false == null: ';
var_dump(false == null);
echo 'false === null: ';
var_dump(false === null);
echo "\n";
echo '"0" == false: ';
var_dump("0" == false);
echo '"0" === false: ';
var_dump("0" === false);
echo "\n";
echo '"0" == null: ';
var_dump("0" == null);
echo '"0" === null: ';
var_dump("0" === null);
echo "\n";
echo '"" == false: ';
var_dump("" == false);
echo '"" === false: ';
var_dump("" === false);
echo "\n";
echo '"" == null: ';
var_dump("" == null);
echo '"" == null: ';
var_dump("" === null);
测试结果:
→ php test.php
0 == false: bool(true)
0 === false: bool(false)
0 == null: bool(true)
0 === null: bool(false)
false == null: bool(true)
false === null: bool(false)
"0" == false: bool(true)
"0" === false: bool(false)
"0" == null: bool(false)
"0" === null: bool(false)
"" == false: bool(true)
"" === false: bool(false)
"" == null: bool(true)
"" == null: bool(false)
比如像 array_search,没找到返回 false,找到了返回 key,而 key 是可能为 0 的:
猜猜下面代码返回什么?
$test=array(100, 101, 102, 103);
if($key=array_search(100, $test)){
echo $key;
}
else{
echo "Not found";
}
发表评论