PHP 小技巧(一)

曾经我以为 PHP 很简单,但后来发现我错了,不是 PHP 简单,而是 PHP 容易入门;不是 PHP 写不出好代码,而是很多 PHP 程序员只关心如何实现,却不关心如何优雅地实现。

弱类型也有类型

PHP 是弱类型的语言,但不代表没有类型,PHP 会隐式转换类型,你也可以强制转换。

$_GET $_POST 这样的外部变量,初始类型都是字符串。

当判断一个有可能被转换为 FALSE 的变量是否存在时,请使用 isset($foo) 而不是 !$foo。当 $foo 真的不存在时,后者会报 Notice: Undefined variable;当后者的值为 0 空字符串 NULL 等的时候,后者会返回 TRUE

foreach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function foo()
{
echo 'a';
return [1, 2, 3];
}
foreach (foo() as $v)
{
}
// 输出 a

据某资深程序员说,在 PHP 4 中,会输出 ‘aaa’,因为每移动一次指针,foo() 都会重新执行一次,但是在 PHP 5 中没有重现。

巧用闭包引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$foo = 'Hello';
$bar = function ($arg) use (&$foo)
{
$foo .= $arg;
};
$bar(' World.');
echo $foo;
// 输出 Hello World.
$foo = 'foo';
$bar('bar');
// 输出 foobar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$bar = function ($foo) use (&$bar)
{
$foo--;
if ($foo > 5)
{
return $bar($foo);
}
return $foo;
};
echo $bar(10);
// 输出 5

阅后即焚

1
2
3
4
5
6
7
8
9
<?php
$file = '/path/to/file';
readfile($file);
fastcgi_finish_request();
unlink($file);