#php #laravel
Вопрос:
Поэтому я проверяю пару условий в заявлении if:
if ($amount !== $payment->price || strtolower($currency) !== strtolower($payment['currency'])) {
Log::info($amount);
Log::info($payment->price);
Log::info(strtolower($currency));
Log::info(strtolower($payment['currency']));
$payment->status = Payment::STATUS_NEEDS_ATTENTION;
$payment->message = Payment::PAYMENT_ERROR;
} else {
$payment->message = Payment::PAYMENT_ERROR;
$payment->status = Payment::STATUS_PAID;
}
И я не понимаю , почему он проходит if
условие, и это то, к чему я прихожу Log::info
, поскольку я вижу, что он не должен проходить if
условие, к которому он должен перейти else
[2021-09-30 17:23:31] local.INFO: 1397
[2021-09-30 17:23:31] local.INFO: 1397
[2021-09-30 17:23:31] local.INFO: eur
[2021-09-30 17:23:31] local.INFO: eur
Я не понимаю, почему это соответствует условию «если», но не иначе?
Комментарии:
1. Как мы можем знать, если вы не сообщили нам значения переменных? Пожалуйста, покажите нам вывод
var_dump([$amount, $payment->price, $currency, $payment['currency']]);
Также, вы извлекаете цену из платежа, как если бы это был объект$payment->price
, но затем в той же строке извлекаете валюту , как если бы платеж был массивом$payment['currency']
. Это немного странно, не так ли?2. Вы можете попробовать использовать оператор != вместо !==
3. Мои извинения, я не видел, чтобы код регистрировал значения, и вы выводили их в своем вопросе. Однако при использовании
var_dump
должен отображаться тип данных, который может помочь вам понять, почему!==
это не то же самое, что!=
. Кроме того, вам все еще нужно решить проблему «объект против массива».
Ответ №1:
Возможное объяснение может заключаться в !==
операторе, который вы использовали. Их тип данных может отличаться. Что вы можете попробовать, так это зарегистрировать их PHP gettype()
или var_dump()
проверить их тип данных.
Почему это должно быть причиной? Различные пакеты , используемые для оплаты, и тележки могут возвращаться price
string
, например, в другом формате кодирования.
Кроме того, имейте в виду, что сравнение 2 float
значений может не дать ожидаемого результата. Убедитесь, что они округлены до приемлемой точки, где может быть допущена неточность