Для чего используется +=?
Я думаю, что это глупый вопрос, но я не смог найти его на php. Почему знак + с символом = в следующем коде:
function calculateRanking()
{
$created = $this->getCreated();
$diff = $this->getTimeDifference($created, date('F d, Y h:i:s A'));
$time = $diff['days'] * 24;
$time += $diff['hours'];
$time += ($diff['minutes'] / 60);
$time += (($diff['seconds'] / 60)/60);
$base = $time + 2;
$this->ranking = ($this->points - 1) / pow($base, 1.5);
$this->save();
}
Это так, что $time имеет все эти значения или, скорее, он добавляет все значения к $time?
Спасибо
11 ответов
Он добавляет все эти значения ко времени.
something += somethingelse
это ярлык для
something = something + somethingelse
-Адам
$time += $diff['hours'];
это то же самое, что сказать
$time = $time + $diff['hours'];
a += 2;
является эквивалентом a = a + 2;
Когда-то с некоторыми языками (особенно с очень старыми компиляторами Си) компилятор генерировал лучший код с первым вариантом. Теперь он остался, потому что это обычная идиома, и люди привыкли, что она понятнее.
Есть много таких сокращенных операторов в C, C++ и других современных языках.
a -= b; // a = a - b;
a *= b; // a = a * b;
a &= b; // a = a & b;
и тд и тд и тп
Я просто хотел добавить, что эта информация действительно находится на веб-сайте PHP в разделе об операторах, или, более конкретно, об операторах присваивания.
Давайте заменим несколько вещей, чтобы их было немного легче понять.
+= Так же, как показано ниже:
$time = $diff['days'] * 24;
$time = $time + $diff['hours'];
$time = $time + ($diff['minutes'] / 60);
$time = $time + (($diff['seconds'] / 60)/60);
Оператор ярлыка для $val = $val + $otherval.
Это работает только на числовые значения
x += 10 - просто более короткий способ написать x = x + 10.
В этом случае код находит разницу во времени в часах из структуры разницы во времени.
Кроме того, "a += b" - это выражение, значение которого может быть немедленно использовано снова,
(((((a += b) *= c) += d) * e) += f);
намного меньше печатать, чем
a = a + b;
a = a * c;
a = a + d;
a = a * e;
a = a + f;
Согласно вашему коду
$time += $diff['hours'];
$time += ($diff['minutes'] / 60);
$time += (($diff['seconds'] / 60)/60);
похожи на следующие:-
$time = $time + $diff['hours'];
$time = $time + ($diff['minutes'] / 60);
$time = $time + (($diff['seconds'] / 60)/60);
Если оба операнда являются массивами, $a += $b
это также сокращение для array_merge($a, $b)
, Эта функция объединяет два массива в один, отбрасывая любой ключ в $b
что уже существует в $a
,
$arr1 = array(4 => "four", 1 => "one", 2 => "two");
$arr2 = array("three", "four", "five");
$arr1 += $arr2;
print_r ($arr1);
// outputs:
Array
(
[4] => four
[1] => one
[2] => two
[0] => three
)
$arr1 = array(4 => "four", 1 => "one", 2 => "two");
$arr2 = array("three", "four", "five");
$arr2 += $arr1;
print_r ($arr2);
// outputs:
Array
(
[0] => three
[1] => four
[2] => five
[4] => four
)
Почему каждое тело выполняется простым способом, если мы используем += или -= или любую комбинацию из более чем одного оператора, означает, что мы выполняем какое-то действие самым быстрым способом, например, если вы выполните здесь a = a+b, компилятор сгенерирует 2 токена для и 1 для b, чем добавить это значение и сохранить его сложным и трудоемким процессом, но если вы сделаете a =+ b, то здесь у нас будет всего 2 токена и это похоже на побитовую операцию, которая работает быстро. для получения более подробной информации о кодировании на уровне компилятора или работе с кодом вы можете связаться по моему идентификатору s.sourabh1989@gmail.com