Быстрее $ foo?$ foo: 'bar' - PullRequest
       40

Быстрее $ foo?$ foo: 'bar'

2 голосов
/ 06 апреля 2011

Строка кода произносит газиллион слов так:

$foo = false;
$bar = $foo ? $foo : 'bar';
/* $bar == 'bar' */

$foo = 'foo';
$bar = $foo ? $foo : 'bar';
/* $bar == 'foo' */

Есть ли более быстрый способ сказать "если что-то не так, то не меняйте его (если $foo не false, тогда оно остается таким, каким оно было, иначе мы изменим это ) "

Ответы [ 6 ]

10 голосов
/ 06 апреля 2011

Действительно: это действительно коротко! : D Однако, начиная с 5.3, он становится еще короче

$bar = $foo ?: 'bar';
7 голосов
/ 06 апреля 2011

Старайтесь думать не только о более быстром написании , но и о более быстром чтении.
Со временем вы поймете, что комфортное чтение намного важнее, чем эти глупые уловки при написании.

2 голосов
/ 06 апреля 2011
$foo = false;
$bar = $foo ?: 'bar';

должен вернуть 'bar

$foo = true;
$bar = $foo ?: 'bar';

должно вернуть true;

AS 5,3

1 голос
/ 06 апреля 2011

"Быстрее" по какой метрике?

С точки зрения времени выполнения, это никогда не станет вашим узким местом, так что не беспокойтесь об этом.

С точки зрения разборчивости, следующее легко читается:

$foo = false; // done elsewhere

$bar = $foo;
if (!$bar) {  // I've assumed from your examples that
              // you meant more than just "not false"
   $bar = 'bar';
}
0 голосов
/ 07 апреля 2011

Не знаю, почему это всегда забывают, но есть также синтаксис Perl-esque:

$foo = $foo   or   $foo = "bar";

Или в вашем случае просто:

$foo   or   $foo = "bar";

Я часто использую чрезмерноепробелы, чтобы держать его читабельным.Самое главное, что он действительно не выполняет присваивание, если $ foo не имеет значения false.

0 голосов
/ 06 апреля 2011

Меня беспокоит, что у вас может быть значение, которое приводит к ложному значению

$age = 0;
$myAge = $age ? $age : 21; //If no age assume drinking age

Вы не получите это при прямом, чувствительном к типу сравнении

if ($age ==== false) { 
  //stuff
}
...