Как написать сокращенный сеттер в PHP? - PullRequest
0 голосов
/ 22 января 2012

Мне любопытно, есть ли способ написать сокращенный сеттер в PHP. Моя основная задача при написании кода - сделать его как можно более строгим, и я думаю, что следующее довольно громоздко:

$value = "Which array do I go in?";
if(true)
    $arr_1[] = $value;
else
    $arr_2[] = $value;

Есть ли лучший способ написать это? Я пытался использовать стенографию, если:

(true)?$arr_1[]:$arr_2[] = "Which array do I go in?";

Но это не похоже на работу. У кого-нибудь есть какие-нибудь классные трюки для такой ситуации?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 22 января 2012

Нет краткого описания того, что вы пытаетесь сделать.Кроме того, вы должны понимать, что создание кода «настолько сжатым, насколько это возможно» часто происходит за счет читабельности.

РЕДАКТИРОВАТЬ: Есть несколько уродливых хаков, чтобы делать то, что вы хотите, но я настоятельно рекомендую против.Например:

$GLOBALS[cond ? 'varname1' : 'varname2'] = $value;
3 голосов
/ 22 января 2012

Еще один хак:

$arr = ($cond ? &$arr_1 : &$arr_2);
$arr[] = 'Which array do I go in';

это две строки, но он не требует глобальных функций и будет работать в функции.Однако для удобства чтения, вероятно, лучше использовать оператор if.(Примечание: & делает ссылку на переменную, поэтому это работает).Другой (который может помочь вам понять, КАК работает троичный оператор):

$cond ? $arr_1[] = $value : $arr_2[] = $value;

Вы видите, что троичный оператор оценивает (запускает путь к коду) только успешную оценку (справа от?)если верно, с правой стороны: если false).Однако, если вы думаете, что это быстрее, чем при использовании «если», вы ошибаетесь, ваш менее «жесткий» код на самом деле будет работать лучше .

1 голос
/ 22 января 2012

Другой вариант (например, если вы не можете / не хотите использовать глобальные переменные).

${$cond?'arr_1':'arr_2'}[] = $value;
...