在 php 函数之间传递变量值

Pass variable value between php functions

我试图在同一个 class 到 运行 中将 $shippingMethod 的值从 getMainDetails() 函数共享到 estimateDeliveryDate() 函数有条件但第二个函数似乎没有得到值:

private function getMainDetails($order)
{
    //This value is correctly being set from my order details in Magento
    $shippingMethod = strtolower($order->getShippingDescription());
}

private function estimateDeliveryDate($orderCreatedDate)
{
    if ($shippingMethod == 'saturday delivery') {
        echo 'Saturday Delivery';
    } else {
        echo 'Standard Delivery';
    } 
}

想知道是否有人可以提供帮助?

谢谢。

您需要将变量添加为 属性,如下所示:

class myClass
{
    private $shippingMethod;

    private function getMainDetails($order)
    {
        //This value is correctly being set from my order details in Magento
        $this->shippingMethod = strtolower($order->getShippingDescription());
    }


    private function estimateDeliveryDate($orderCreatedDate)
    {
        if ($this->shippingMethod == 'saturday delivery')
        {
            echo 'Saturday Delivery';
        } else {
            echo 'Standard Delivery';
        }

    }
}

编辑

然而,更可靠的方法是遵循以下思路:

class DeliveryHandler
{
    private $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    private function getDeliveryDateEstimate()
    {
        if ($this->order->getShippingMethod() == 'saturday delivery') {
            return 'Saturday Delivery';
        } else {
            return 'Standard Delivery';
        }

    }
}

class Order
{
    public function getShippingMethod()
    {
        return strtolower($this->getShippingDescription());
    }
}

该示例中发生的事情很少。

  1. 我将 shippingMethod() 移到了 Order class 因为这不是 DeliveryHandler 的责任所以它不必关心什么以那种方式进行。数据属于并来自Order.

  2. 我将 getDeliveryDateEstimate() return 设为字符串,而不是使用 echo。这使您的代码更具可重用性——例如,如果有一天您想要将其传递给模板或另一个变量而不是回显它,该怎么办。这样你就可以保持你的选择。

  3. 我正在使用依赖注入将 Order class 传递到 DeliveryHandler,从而使 [=13] 的 public 接口=] 可用于 DeliveryHandler.

如果您恰好订阅了 laracast,您可以在此处查看这些课程,它们以易于理解的格式解释了所有这些内容:

https://laracasts.com/series/object-oriented-bootcamp-in-php

https://laracasts.com/series/solid-principles-in-php

使用 class ($this->variable) 的属性,而不是局部变量 ($variable)。您的代码中也有语法错误,您在其中比较 $shippingMethod.

的值

下面的方法假定您在 能够使用estimateDeliveryDate() 之前调用getMainDetails() 。但是,您应该确保通过将 $order 传递给 estimateDeliveryDate(),并从那里调用 getMainDetails()(您从 getter 调用 return 而不是设置属性).

class Foo (
    private $this->shippingMethod; // Initialize

    /* Your other methods */

    private function getMainDetails($order)
    {
        //This value is correctly being set from my order details in Magento
        $this->shippingMethod = strtolower($order->getShippingDescription());
    }

    private function estimateDeliveryDate($orderCreatedDate)
    {
        if ($this->shippingMethod == 'saturday delivery') {
            echo 'Saturday Delivery';
        } else {
            echo 'Standard Delivery';
        }
    }
)

或者,您可以 return 从每个函数 - 这是您 应该 从方法 "getter" 做的,即 getMainDetails()