在这种情况下,执行一个功能取决于成功执行另一个返回值或null的功能,如下所示。
$user = $userModel->createUser();
if ($user) {
// I skip how $user is being used here.
$order = $orderModel->createOrder();
if ($order) {
// I skip how $order is being used here.
$invoice = $invoiceModel->createInvoice();
if ($invoice) {
// I skip how $invoice is being used here.
$payment = $paymentModel->createPayment();
if ($payment) {
// I skip how $payment is being used here.
$shipping = $shippingModel->createShipping();
if ($shipping) {
$this->notifyCustomer();
}
}
}
}
}
我确实知道编写许多嵌套的if语句不是一个好习惯。以下代码片段是更好的选择吗?
$user = $userModel->createUser();
$order = null;
if ($user) {
// I skip how $user is being used here.
$order = $orderModel->createOrder();
}
$invoice = null;
if ($order) {
// I skip how $order is being used here.
$invoice = $invoiceModel->createInvoice();
}
$payment = null;
if ($invoice) {
// I skip how $invoice is being used here.
$payment = $paymentModel->createPayment();
}
$shipping = null;
if ($payment) {
// I skip how $payment is being used here.
$shipping = $shippingModel->createShipping();
}
if ($shipping) {
$this->notifyCustomer();
}
为什么对此解决方案感到怀疑,是因为声明了多个变量以逃避嵌套的if语句。