【问题标题】:What does the function parameter without a dollar sign mean?没有美元符号的函数参数是什么意思?
【发布时间】:2016-03-04 22:44:18
【问题描述】:

我一直在研究 PHP OOP,偶然发现了这个有趣的函数声明:

class ShopProductWriter {

    public $products = array();

    public function addProduct(ShopProduct $shopProduct) {
        //code here..
    }
}

注意addProduct 函数ShopProduct 的第一个参数如何没有美元符号?什么意思?

【问题讨论】:

    标签: php function oop parameters type-hinting


    【解决方案1】:

    它不是一个参数。它是 $shopProduct 的类型定义。此函数只需要 1 个参数,因此 $shopProduct 只能是 ShopProduct 类

    【讨论】:

      【解决方案2】:

      这是打字提示。

      参数列表必须用逗号分隔。它位于参数前面并声明参数的类型。

      您的示例类型提示适用于 ShopProduct 类的对象。

      含义:如果传递了其他内容,例如整数或数组,该方法将抛出异常。 (它反映了继承。假设有一个 SpecificShopProduct 的实例,一个将扩展 ShopProduct 的类,你也可以传递它。)

      可以键入提示对象和数组、类或接口。不能对整数或字符串等普通变量类型进行类型提示,也不能对对象数组进行类型提示。

      public function foo(array someArray, LoggerInterface $logger)
      {
      }
      

      然而对于其他一些类型,您可以使用 phpDoc cmets,但那些是为了可读性和 IDE 支持,它们不会强制执行类型;这意味着您必须自己检查是否传递了正确的类型。

      /**
       * @param ShopProductWriter[] arrayOfObjects
       * @param int $someInt
       * @param string $someString
       */
      
      public function foo(array arrayOfObjects, $someInt, $someString)
      {
      }
      

      【讨论】:

      • 我喜欢它。非常感谢!
      • 我现在不能。但是一旦我获得 15 点声望点。我会回到这里完成契约
      猜你喜欢
      • 2017-07-22
      • 2020-01-20
      • 1970-01-01
      • 2021-11-09
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      相关资源
      最近更新 更多