我正在尝试将"message"
函数中的$shippingMethod
值共享到同一个类中的getMainDetails()
函数以运行条件,但第二个函数似乎没有获得价值:
estimateDeliveryDate()
想知道是否有人可以提供帮助?
谢谢。
答案 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());
}
}
这个例子中很少有事情发生。
我已将shippingMethod()
移至Order
课程,因为它不是DeliveryHandler
的责任,所以它不应该关心那里发生了什么方法。数据属于Order
。
我让getDeliveryDateEstimate()
返回一个字符串,而不是使用echo
。这使得您的代码更具可重用性 - 例如,如果有一天您希望将其传递给模板或其他变量而不是回显它。通过这种方式,您可以打开选项。
我使用依赖注入将Order
类传递到DeliveryHandler
,从而使Order
的公共接口可用于DeliveryHandler
。
如果您碰巧订购了laracast,可以在这里查看这些课程,他们会以一种易于理解的格式解释所有这些内容:
https://laracasts.com/series/object-oriented-bootcamp-in-php