【问题标题】:What are these mysterious things in defining methods?定义方法的这些神秘事物是什么?
【发布时间】:2017-08-14 15:12:31
【问题描述】:

在担任管理职位几年后回到开发,我正在处理一个 PHP 代码,其中有一些我无法理解的定义(看起来这些年我远远超出了 PHP 的进步)。谁能告诉我这个定义中的campaignDTO和ParamDTO是做什么的?

这个方法会返回什么?

/**
 * Creates a campaign
 * @param campaignDTO $campaign
 * @param ParamDTO $param
 * @throws \Exception
 * @return campaignDTO
 */
public function createCampaign(campaignDTO $campaign, ParamDTO $param)
{
}

【问题讨论】:

标签: php codeigniter


【解决方案1】:

Type declarations as per docs:

类型声明允许函数要求参数是 调用时的某种类型。如果给定的值不正确 类型,然后生成错误:在 PHP 5 中,这将是可恢复的 致命错误,而 PHP 7 会抛出 TypeError 异常。

【讨论】:

  • 感谢您的回复,所以您的意思是代码中的某处应该有一个名为“campaignDTO”的类?问题2,数据类型是否可以使用命名空间而不是类?
  • 是的,应该有一个具有该名称的类...至于命名空间,请参阅文档:php.net/manual/en/language.namespaces.php
  • 我在整个项目中找不到任何具有该名称的类...还有什么可以用作类型?
  • 它可能没有自己的源文件,可能与许多其他类在一个公共文件中。特别是当它是一个接口或祖先类,并且它的一些实现者或子类在同一个文件中时。
【解决方案2】:

这些是type-hints 用于运行时验证。它告诉代码期待 campaignDTOParamDTO 类类型的对象,或从这些类扩展的类。

如果你传入一个数组、一个字符串,或者不是类的东西,或者扩展capaignDTO,那么代码会抛出一个错误。

该函数实际上不返回任何内容。

根据代码注释,它会返回一个campaignDTO类型的对象,看起来像第一个参数。

【讨论】:

  • 感谢您的回复,所以您的意思是代码中的某处应该有一个名为“campaignDTO”的类?问题2,数据类型是否可以使用命名空间而不是类?