在php函数之间传递变量值

时间:2017-09-01 14:02:18

标签: php function php-5.3

我正在尝试将"message"函数中的$shippingMethod值共享到同一个类中的getMainDetails()函数以运行条件,但第二个函数似乎没有获得价值:

estimateDeliveryDate()

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

谢谢。

2 个答案:

答案 0 :(得分:2)

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

以下方法假设您在能够使用getMainDetails()之前致电estimateDeliveryDate() 。但是,您应该确保将$order传递给estimateDeliveryDate(),然后从那里调用getMainDetails()(来自getter的return而不是设置属性)。< / p>

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来自每个功能 - 这是您应该从&#34; getter&#34;,即getMainDetails() <的方法中执行的操作/ p>

答案 1 :(得分:1)

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

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课程,因为它不是DeliveryHandler的责任,所以它不应该关心那里发生了什么方法。数据属于Order

  2. 我让getDeliveryDateEstimate()返回一个字符串,而不是使用echo。这使得您的代码更具可重用性 - 例如,如果有一天您希望将其传递给模板或其他变量而不是回显它。通过这种方式,您可以打开选项。

  3. 我使用依赖注入将Order类传递到DeliveryHandler,从而使Order的公共接口可用于DeliveryHandler

  4. 如果您碰巧订购了laracast,可以在这里查看这些课程,他们会以一种易于理解的格式解释所有这些内容:

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

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