为什么我可以在其范围之外访问foreach变量? [重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我注意到我可以在其范围之外访问变量$order的值。

public function dryRunAction()
{     
    $allCustomersBefore = Mage::getModel('customer/customer')->getCollection()
                                                       ->addAttributeToSelect('*')
                                                       ->addFieldToFilter('customer_activated', '1')
                                                       ->addFieldToFilter('group_id', array('6'));


    foreach($allCustomersBefore as $customer) {

        $orders = Mage::getResourceModel('sales/order_collection')
            ->addAttributeToSelect('*')
            ->addFieldToFilter('customer_id', $customer->getId());

        $atLeastOnePendingOrder = false;
        foreach($orders as $order) {

            if ($order->getStatus() == 'pending') {
                $atLeastOnePendingOrder = true;
                break;
            }
        }


        if ($atLeastOnePendingOrder) {
            echo $customer->getName() . " already made an order (Order Status: ". $order->getStatus() . ").<br>";        
        }
    }
}

变量$ output未在foreach之前定义。

输出是Mr Sample Customer already made an order (Order Status: pending).

php php-5.6
1个回答
2
投票

foreach循环是块级别,而不是函数级别。

在函数中声明的变量在外面不可用。

但是,块外的变量始终可用。

它们的值应该是迭代的最新值。

Reference:

© www.soinside.com 2019 - 2024. All rights reserved.