在 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());
}
}
该示例中发生的事情很少。
我将 shippingMethod()
移到了 Order
class 因为这不是 DeliveryHandler
的责任所以它不必关心什么以那种方式进行。数据属于并来自Order
.
我将 getDeliveryDateEstimate()
return 设为字符串,而不是使用 echo
。这使您的代码更具可重用性——例如,如果有一天您想要将其传递给模板或另一个变量而不是回显它,该怎么办。这样你就可以保持你的选择。
我正在使用依赖注入将 Order
class 传递到 DeliveryHandler
,从而使 [=13] 的 public 接口=] 可用于 DeliveryHandler
.
如果您恰好订阅了 laracast,您可以在此处查看这些课程,它们以易于理解的格式解释了所有这些内容:
https://laracasts.com/series/object-oriented-bootcamp-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()
我试图在同一个 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());
}
}
该示例中发生的事情很少。
我将
shippingMethod()
移到了Order
class 因为这不是DeliveryHandler
的责任所以它不必关心什么以那种方式进行。数据属于并来自Order
.我将
getDeliveryDateEstimate()
return 设为字符串,而不是使用echo
。这使您的代码更具可重用性——例如,如果有一天您想要将其传递给模板或另一个变量而不是回显它,该怎么办。这样你就可以保持你的选择。我正在使用依赖注入将
Order
class 传递到DeliveryHandler
,从而使 [=13] 的 public 接口=] 可用于DeliveryHandler
.
如果您恰好订阅了 laracast,您可以在此处查看这些课程,它们以易于理解的格式解释了所有这些内容:
https://laracasts.com/series/object-oriented-bootcamp-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()