Я пытаюсь устранить проблему, и вам нужно понять, что говорит это утверждение if:
if ($confirmation = $payment_modules->confirmation()) {
Все ресурсы, которые я могу найти, показывают только выражения с двойными равными знаками, а не одиночными. Является ли это одной из сокращенных форм php, если? Что он делает?
(Если это действительно неправильный синтаксис, изменение его на знак двойного равенства не решает проблему.Как есть, в некоторых сценариях он возвращает true. В сценарии, который я искал, он не возвращает true до тех пор, пока я не вернусь обновите браузер.)
Любая помощь очень ценится !!!
Это форма стенографии, которая в точности эквивалентна этому:
$confirmation = $payment_modules->confirmation(); if ($confirmation) { }
Сначала будет присвоено значение $payment_modules->confirmation()
для $confirmation
. Оператор =
будет оценивать новое значение $confirmation
.
Это имеет тот же эффект, что и запись:
$confirmation = $payment_modules->confirmation(); if ($confirmation) { // this will get executed if $confirmation is not false, null, or zero }
Код работает, потому что присваивание возвращает назначенное значение, поэтому, если $payment_modules->confirmation()
true
, $payment_modules->confirmation()
будет установлено в true
, а затем присваивание вернет true
. То же самое для false
.
Вот почему вы можете использовать команду для назначения для многих переменных, как в a = b = 0
. Назначает ноль в b
и возвращает этот ноль. Следовательно, оно становится a = 0
. И a
получает нуль, и он вернет тот ноль, который может или не может быть использован.
Иногда людям нравится выполнять задание, а затем проверить, прошел ли уступка. Сопоставьте это с функциями, которые возвращают false (или эквивалент) при сбое, и вы можете выполнять назначение и проверку одновременно.
Чтобы понять это, помните, что присваивания являются своего рода выражением, и поэтому (как и все выражения) имеют возвращаемое значение. Это возвращаемое значение равно тому, что попало в переменную. Вот почему вы можете сделать что-то вроде
a = b = c = 0;
для назначения всех этих переменных одновременно.
=
означает назначение ($ a = 1), ==
для сравнения (true == false is false). Я думаю, что в вашем примере он должен использовать =
потому что он присваивает ему возвращаемое значение подтверждения, которое должно быть чем-то, что оценивается как true.
Попробуйте сделать var_dump:
var_dump( $payment_modules->confirmation() );
Посмотрите, что логически это оценивается, и оттуда вы можете устранить неполадки. Если вам нужна дополнительная помощь, отправьте больше кода.
class test() { public function confirmation() { return true; } } $boolean = test::confirmation(); var_dump( $boolean );
Приравнивается к true