我正在调试其他人的代码,这实际上给了我代码的灵感,并允许我编写一个很好的插件。
问题是现在我的插件工作正常,但我不太明白为什么。
我试图了解将名称空间作为参数添加到函数中的好处和后果是什么。
在我的代码中,我正在分析这部分:
public function check_shipping(Order $order, $option) {}
其中Order是我在代码中导入的命名空间:
use Store\Model\Order;
而$order
和$option
实际上是两个对象,它们是我函数中的参数。
您知道,我正在使用ExpressionEngine并使用来自第三方插件的特定挂钩。
基本上,我的问题是:我的命名空间与我的函数中的两个参数之间的关系是什么?
前两个参数是否有关系,因为它们之间没有逗号?
答案 0 :(得分:5)
鉴于此方法:
public function check_shipping(Order $order, $option) {}
我们看到Order
是$order
参数的typehint。 Order
和$order
不是两个不同的参数。 Order
正在定义$order
的类型。
这是PHP Documentation on defining function argument types。您会注意到PHP的功能因您运行的PHP版本而异。 PHP 7引入了标量类型提示,例如string
,int
等,但您可以在PHP 5.0和5.1之后的数组中输入提示对象。
$option
没有typehint,但你可以在,
之后添加一个,具体取决于它的类型和PHP版本。
定义typehint时,可以引用完整的命名空间:
public function check_shipping(\Store\Model\Order $order, $option) {}
这样您就不必使用use
声明导入名称空间。 (不是说这是你想在任何特定情况下做的事情。我只是说你可以这样做)