【问题标题】:type hinting and the reason(s) behind their limitations类型提示及其局限性背后的原因
【发布时间】:2011-12-11 20:06:35
【问题描述】:

objectarray 真的是唯一允许类型提示的类型吗?

另外,他们在文档中声明标准类型 stringint 也不能进行类型提示。

这让我更加好奇。只允许两种类型提示并放弃标准提示的原因是什么?

提前致谢!

【问题讨论】:

  • 你也可以把一个类当成一个类型。
  • 你也可以使用接口作为类型。
  • 无论如何它们都属于object的范畴。

标签: php types type-hinting


【解决方案1】:

PHP 5.3 目前仅支持 arrayClassName 类型提示。
即将发布的 PHP 5.4 版本也将支持 callable 类型提示。

目前不支持标量类型提示的原因是它们在弱类型语言中的行为不清楚:

  • 是否应该抛出错误,即使只是1'1' 之间的差异? -> 反对 PHP 精神
  • 是否应该应用普通的 PHP 强制转换?在那种情况下,'hallo' 会给 0 一个 int 类型提示 -> 不直观
  • 是否应该应用一些更严格的强制转换规则?

这就是标量类型提示实现从 PHP 5.4 中退出的原因 - 在这个问题上没有达成共识。

【讨论】:

  • 啊,这让我觉得 PHP 在开始时有点实验性,随着它的发展,它只是在自我扩展。有关于弱类型语言的参考吗?
  • @Tom en.wikipedia.org/wiki/Weak_typing 这意味着 PHP 会进行隐式类型转换。例如。你可以写echo $int; 而不是显式的echo (string) $int;
  • 也就是说,没有办法强制初学者/实验者/流浪者在编写低级内容时正确使用我的应用程序?
  • 你只能添加@param注解来帮助人们使用你的API。
  • 您可以进行防御性编程,但不建议在 API 中使用。应该由开发人员来学习如何正确使用它们。
【解决方案2】:

是的,只有数组和对象是类型提示允许的类型。

http://www.php.net/manual/en/language.oop5.typehinting.php

查看最后一行:

类型提示只能是对象和数组(自 PHP 5.1 起)类型。不支持使用 int 和 string 进行传统类型提示。

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 2011-06-16
    • 1970-01-01
    • 2010-10-28
    • 2019-06-07
    • 2021-10-21
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多