Для чего используется +=?

Я думаю, что это глупый вопрос, но я не смог найти его на 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

Другие вопросы по тегам