我的清单...大部分更多地属于“隐藏功能”而非“最喜欢的功能”(我希望如此!),并且并非所有功能都有用,但是...是的。
list($a, $b) = array($b, $a);
$arr = array(
array('aaaa', 'bbb'),
array('cc', 'd')
);
list(list($a, $b), list($c, $d)) = $arr;
echo "$a $b $c $d";
while (list($arr1[], $arr2[], $arr3[]) = mysql_fetch_row($res)) { .. }
foreach($data as $row) list($col_1[], $col_2[], $col_3[]) = $row;
$foo = $condition ? 'Yes' . (($bar = 'right') && false) : 'No' . (($bar = 'left') && false);
list($foo, $bar) = $condition ? array('Yes', 'right') : array('No', 'left');
你也可以嵌套三元运算符,在某些情况下非常方便。
$foo = ${$custom?'P':'C'}['size'.$i];
$foo = $custom?$P['size'.$i]:$C['size'.$i];
foreach ($all_rows as $row) ${'data'.($row['active']?1:0)}[] = $row;
$string = 'f.> <!-? o+';
${$string} = 'asdfasf';
echo ${$string};
echo $GLOBALS['f.> <!-? o+'];
${''} = 456;
echo ${''};
echo $GLOBALS[''];
好的,我现在停止翻译 :-)
嗯,已经有一段时间了..
// just discovered you can comment the hell out of php:
$q=$_GET['q'];
所以,刚刚发现如果你用花括号将任意字符串包起来,就可以将其作为方法名传递。但是你不能定义任何字符串作为方法名,不过你可以通过__call()捕获它们,并根据需要进一步处理。嗯...
class foo {
function __call($func, $args) {
eval ($func);
}
}
$x = new foo;
$x->{'foreach(range(1, 10) as $i) {echo $i."\n";}'}();
我在 Reddit 的评论中发现了这个小宝石:
$foo = 'abcde';
$strlen = 'strlen';
echo "$foo is {$strlen($foo)} characters long."; // "abcde is 5 characters long."
您不能直接在{}内部调用函数,但是您可以使用保存函数名称的变量并调用它们! (*同时*您也可以在其上使用变量变量)