【问题标题】:Namespace as a parameter in a function in php命名空间作为php函数中的参数
【发布时间】:2018-09-14 04:06:42
【问题描述】:

我在调试别人的代码,这实际上给了我代码的灵感,让我可以写出一个不错的插件。

问题是现在我的插件工作正常,但我不太明白为什么。

我试图了解将命名空间作为参数添加到函数的好处和后果。

在我的代码中,我正在分析这部分:

public function check_shipping(Order $order, $option) {}

Order 是我在代码中导入的命名空间:

use Store\Model\Order;

$order$option 实际上是两个对象,它们是我函数中的参数。

请注意,我正在使用 ExpressionEngine 并使用来自第三方插件的特定挂钩。

本质上,我的问题是:我的命名空间和函数中的两个参数之间有什么关系?

前两个参数是否有关系,因为它们之间没有逗号?

【问题讨论】:

  • 当然 Order 是一个位于命名空间中的类,在示例中表示 $order 应作为传递的类型。
  • 我认为(如果我理解你的话)第一个“参数”实际上是一个类型提示,你是在告诉 PHP 解释器传递给这个函数的第一个参数必须是 Order 类型
  • 参数的Type。你应该学习一些强类型语言,比如 Java,你就会知道 Type 到底是什么。
  • 我认为没有必要为了理解 PHP 类型提示而学习 Java...
  • 我同意...学习一门语言只是为了掌握类型是什么,非常繁重,只需阅读类型...大约需要 2 分钟

标签: php oop parameters namespaces


【解决方案1】:

鉴于此方法: public function check_shipping(Order $order, $option) {}

我们看到Order$order 参数的类型提示。 Order$order 不是两个不同的参数。 Order 定义了$order 的类型。

这里是PHP Documentation on defining function argument types。您会注意到 PHP 的功能因您运行的 PHP 版本而异。 PHP 7 引入了标量类型提示,例如 stringint 等,但您可以从 PHP 5.0 开始类型提示对象和从 5.1 开始的数组。

$option 没有类型提示,但您可以在 , 之后添加一个,具体取决于它的类型和您的 PHP 版本。

定义类型提示时,您可以引用完整的命名空间: public function check_shipping(\Store\Model\Order $order, $option) {}

这样您就不必使用 use 声明来导入命名空间。 (并不是说在任何特定情况下你都想这样做。我只是说你可以那样做)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2015-11-05
    • 2021-01-08
    • 1970-01-01
    • 2020-04-23
    • 2012-11-07
    相关资源
    最近更新 更多