Это - субъективный вопрос, мне нужны Ваши чувства и мысли о кодировании стандартов и форматировании методов.
Зенд PHP, кодирующий стандарт, требует для записи многострочных вызовов функции как это:
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
Я думаю, что следующий подход более читаем:
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
Поскольку существует только одна строка на левой стороне, это указывает, что это - только один оператор, и аргументы ближе к имени метода.
Какой ВЫ предпочитаете?
Второй подход оставляет вам одну дополнительную проблему: длина строки. Стандарт кодирования Zend предлагает следующее: «Максимальная длина любой строки Код PHP состоит из 120 символов ».
Это означает, что если вам нужны хорошие (длинные, описательные) имена переменных, и у вас есть одно имя для возвращаемого значения, объекта, хорошо именованной функции и длинного параметра, вы гораздо более вероятно чтобы достичь этого предела в 120 символов.
Вдобавок к этому и в зависимости от вашего стандарта максимальная длина может составлять всего 80 символов или что-то среднее между ними.
Кроме того, мне больше нравится первый, если он используется неоднократно
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
Как сказал Пекка, меньше прыжков глазами.
Мне нравится стандарт PEAR, и он защищает первый из ваших примеров
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
, но я мог бы вместо этого сделать это для такого короткого набора параметров:
$returnedValue = $object->longMethodName(
$argument1, $otherArgument, 42
);
РЕДАКТИРОВАТЬ: о! и для примера сидериала:
$notInlined = longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod();
$returnedValue = $object->longMethodName(
$arg1, $notInlined, $arg3, $arg4
);
while ($val) {
someStatement();
}
Мне больше нравится первый подход. Второй требует больше ввода и больше напрягает глаз IMO. Я думаю, что глаз - по крайней мере, у "западной", читающей слева направо части человечества - имеет тенденцию перескакивать к началу следующей строки, когда доходит до конца текущей, а во втором примере слишком много белого пространства для перескакивания. Возможно, семантически это не на 100% правильно, но обеспечивает хороший поток чтения.
Neither? Вариант A потенциально запутан, поскольку для блоков кода используется одинарный отступ. Вариант B проблематичен при длинных именах аргументов и/или глубоких отступах в коде.
Я предпочитаю двойной отступ для длинных списков аргументов.
Пример, по просьбе erenon:
$returnedValue = $object->longMethodName(
$arg1, longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod(),
$arg2, $arg3);
while ($val) {
someStatement();
}
Я обычно использую Первый, но с закрывающей скобкой на той же строке или, по крайней мере, с тем же отступом, что и выше.
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42);
Мне кажется, это помогает избежать путаницы при вложении.
Однако: мой индентор в vim начал работать на том же уровне, что и парен (2, выше), и мне это нравится. Я прерываю его на длинных строках, которые нуждаются в помощи по упаковке, но в целом я думаю, что это приводит к читаемому коду, если вы в первую очередь сканируете имена методов вместо параметров.
Кстати, подобный отступ для вложенных логических операторов и тому подобное тоже хорошо работает.
Я также сгруппирую аргументы в одну строку, если они не слишком длинные и их логично сгруппировать.
Я предпочитаю первый по двум причинам:
Из двух предложенных вами вариантов мне больше нравится первый.
Если существует стандарт кодирования, я буду следовать ему. Однако на моей работе его нет, и я предпочитаю следующий:
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
Мне проще сразу увидеть, что происходит присвоение переменной (из-за того, как отступают параметры и закрывающие скобки. В стандарте Zend нужно искать знак равенства, чтобы понять, что это присваивание, иначе его можно спутать с обычным многострочным вызовом функции.
Еще один комментарий... мои вызовы функций становятся многострочными, только если они превышают 120 символов. Все, что больше 120 символов, не будет видно в моей IDE с разрешением 1600x1200 при открытых панелях Workspace browser и Code Navigator.
В этой строке кода всего 74 символа, поэтому я бы сделал так:
class myClass
{
public function myFunction(...)
{
$returnedValue = $object->longMethodName($argument1, $otherArgument, 42);
}
}