Что означает следующая строка, в частности оператор .=
?
$query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;";
в коде
<?php $conn = pg_pconnect("dbname=publisher"); // these statements will be executed as one transaction $query = "UPDATE authors SET author=UPPER(author) WHERE id=1;"; $query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;"; pg_query($conn, $query); ?>
Кажется, что он делает какой-то массив, так что последняя команда сначала обрабатывает первый запрос, а затем второй.
Это оператор конкатенации присваивания. Он будет конкатенировать или добавить к концу строки. Так:
$a = "Hi!"; $a .= " I"; $a .= " love"; $a .= " StackOverflow"; $a .= " a"; $a .= " lot"; echo $a; // echos "Hi! I love StackOverflow a lot"
В твоем случае
$query = "UPDATE authors SET author=UPPER(author) WHERE id=1;"; $query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;"; echo $query; /* echos "UPDATE authors SET author=UPPER(author) WHERE id=1; UPDATE authors SET author=LOWER(author) WHERE id=2; */
Это означает $query = $query . "UPDATE authors SET author=LOWER(author) WHERE id=2;";
$query = $query . "UPDATE authors SET author=LOWER(author) WHERE id=2;";
Поэтому он добавляет строку к переменной запроса.
Ваш вопрос касается оператора .=
. Это сокращение от конкатенации строки, за которой следует задание .
Существует семейство операторов, которые мы можем назвать присваиванием через xyz , где xyz здесь представляет двоичную операцию над операндами того же типа, такие как сложение, вычитание, конкатенация.
Итак, допустим, у нас есть оператор ⊕: int
* int
→ int
, что означает, что он принимает пару int
s и создает другое:
⊕ (a, b) = a ⊕ b
Предположим, мы хотим вычислить ⊕ b
и сохранить результаты по переменной a
. Мы можем это сделать:
a = a ⊕ b
Но мы делаем это так часто, когда кодируем, что оператор был создан для представления строки выше. Вы должны принять его за одну операцию, которая выполняет как операцию ⊕, так и назначение ( =
) с помощью одного вызова:
a ⊕ = b ⇔ a = a ⊕ b.
Итак, в вашем случае у вас есть оператор .=
. Теперь, когда вы знаете о назначении операционными операторами, вы можете предположить, что:
$query = "Hello, " $query .= "World!";
такой же как:
$query = "Hello, " $query = $query . "World!";
Видеть?
Теперь еще одно частое использование операторов такого рода – это версии +=
и -=
.
Однако злоупотребление такими операторами может привести к менее читаемому коду (особенно при работе с операторами «низкого уровня», действующими на биты, например).
.=
просто означает «добавить». Эта
$query = "UPDATE authors SET author=UPPER(author) WHERE id=1;"; $query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;";
… приводит к
$query == "UPDATE authors SET author=UPPER(author) WHERE id=1;UPDATE authors SET author=LOWER(author) WHERE id=2;"
он отделяет обновления; и выполняет оба из них
Объединяет строку … так что $query
становится:
"UPDATE authors SET author=UPPER(author) WHERE id=1;UPDATE authors SET author=LOWER(author) WHERE id=2;"