Вроде бы все всё знают, но почему не все всё используют? Меньше кода, хорошего и разного? Или читаемость все таки теряется?
1. Присвоение в сравнениях
Больше:
$id = $request->getId();
if(!$id) {
return false;
}
Меньше:
if(!$id = $request->getId()) {
return false;
}
Немного снижает читаемость кода. Если переменная используется за пределами ветвления (после него), то применять такой подход не стоит.
2. Тернарный оператор, вместо if
Больше:
if($id) {
return $id;
} else {
return false;
}
Меньше:
return ($id) ? $id : false;
Читаемость нисколько не снижается. ИМХО их и объединять можно:
$a = ($a) ? a : ($b) ? $b : 'default';
3. “Вытаскивание” элементов массива в текущий контекст
Больше:
function resolveArray($params) {
if(array_key_exists('foo', $params)) {
return $params['bar'];
}
}
Меньше:
function resolveArray2($params) {
extract($params);
if(isset($foo)) {
return $bar;
}
}
или
function resolveArray3($params) {
list($foo, $bar) = $params;
if(isset($foo)) {
return $bar;
}
}
Использование extract – несколько порочная практика, ибо непонятно откуда переменные берутся. Использование list’а в этом плане лучше, но он завязан на порядок следования элементов…гад.
Поэтому в больших методах лучше все таки вытаскивать “ручками”:
function resolveSomeArrayInformation3($params) {
$foo = array_key_exists('foo', $params) ? $params['foo'] : false;
$bar = array_key_exists('bar', $params) ? $params['bar'] : false;
if(isset($foo)) {
return $bar;
}
}
, ибо можно нормальные значения по умолчанию задавать и наглядность не теряется. А если писать влом, то используйте возможности вашей IDE (она же позволяет использовать шаблоны, правда?).
4. Инициализация в объявлении цикла
Больше:
$count = count($array);
for($i = 0; $i < $count; $i++) {}
Меньше:
for($i = 0, $count = count($array); $i < $count; $i++) {}
Вполне нормально для меня, для остальных, говорят, не очень.
5. Операции в объявлении цикла
Больше:
for($i = 0; $i < 10; $i++) {
$str .= $i;
}
Меньше:
for($i = 0; $i < 10; $str .= $i++);
Тоже самое, что и в предыдущем.
6. Простое позиционирование в строке
Больше:
$current_letter = substr($str, $i, 1);
Меньше:
$current_letter = $str{$i};
Читаемость лучше, однозначно стоит применять.
И так далее...