我意识到,虽然我的大部分经验都是编写PHP应用程序,但我发现自己不时会犯"初学者错误".这是因为PHP是一种非常有机的语言,因此具有一些我不知道的特性,怪癖和陷阱.
我希望这个问题成为所有想要了解PHP的陷阱和例外的人的维基.但是,请不要写一般的回答,如:
有些功能接收参数为
$needle,$haystack而有的$haystack,$needle.
告诉函数名称.作为例子,你有几个答案.哦,每个答案添加一个陷阱.通过这种方式,我们可以看到哪些是最受鄙视的(通过投票).
我不想开始一场火焰战,把它留给主题.如果您想写一些关于PHP的坏事,那么请将其作为对相应答案的评论.
希望这个wiki对我们所有人,初学者和专家都有帮助.
更新:
在Andrew Moore的评论之后,我认为答案也应该包含一个解决方案或解决方案的陷阱.
Ion*_*tan 10
序列化处理XML结构然后反序列化它们的对象不会恢复原始XML结构:
$dom = new DOMDocument;
$dom->loadXML('<test/>');
$dom = serialize($dom);
$dom = unserialize($dom);
var_dump($dom->saveXML());
// $ Warning: DOMDocument::saveXML(): Couldn't fetch DOMDocument in ...
// $ NULL
Run Code Online (Sandbox Code Playgroud)
类似地,对于SimpleXML对象.
我讨厌如果你用一个?>结束标签关闭php文件你会如何得到问题(这似乎应该是相反的方式).例如,在?>之后包含一些带有空格的文件,然后尝试更改标题(假设没有输出缓冲).啊.我花了很长时间才学会永远不要关闭php文件?>
非行业标准的运营商优先权.
$x = 1;
echo 'foo: ' . $x+1 . ' bar';
Run Code Online (Sandbox Code Playgroud)
将输出:" 1 bar",而不是预期的" foo: 2 bar".解决方案:使用括号.
我有各种各样的麻烦结合foreach和参考
$testarray = array(1 => "one", 2 => "two");
$item = "three";
$testarray[3] =& $item;
foreach ($testarray as $key => $item) {
// do nothing
}
echo $testarray[3]; // outputs "two"
Run Code Online (Sandbox Code Playgroud)
在PHP4时代,这真的让我失望了,虽然如果你不使用显式引用,它在PHP5中通过明智的行为变得更好,我仍然设法偶尔被这个引起.
尽管可以使用for循环和索引来迭代字符串,但不能使用foreach循环来迭代字符串。例子:
$str = 'foo';
$max = strlen($str);
for ($i=0; $i<$max; $i++) {
echo $str[$i];
}
// outputs: foo
foreach ($str as $char) {
echo $char;
}
// Warning: Invalid argument supplied for foreach() ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5849 次 |
| 最近记录: |