概述
从PHP5开始,我们可以使用类型提示来指定定义函数时,函数接收的参数类型。如果在定义函数时,指定了参数的类型,那么当我们调用函数时,如果实参的类型与指定的类型不符,那么PHP会产生一个致命级别的错误(Catchable fatal error)。
类名称和数组
在定义函数时,PHP只支持两种类型声明:类名称和数组。类名称表名该参数接收的实参为对应类实例化的对象,数组表明接收的实参为数组类型。下面是一个例子:
function demo(array $options){ var_dump($options); }
$options='options'; demo($options);
Catchable fatal error: Argument 1 passed to demo() must be of the type array, string given,
可以使用null作为默认参数
注意
有一点需要特别注意的是,PHP只支持两种类型的类型声明,其他任何标量类型的声明都是不支持的,比如下下面的代码都将产生错误:
function demo(string $str){ } $str="hello"; demo($str)
当我们运行上面的代码时,string会被当做类名称对待,因此会报下面的错误:
Catchable fatal error: Argument 1 passed to demo() must be an instance of string, string given,
总结
类型声明也是PHP面向对象的一个进步吧,尤其是在捕获某种指定类型的异常时非常有用。
使用类型声明,也可以增加代码的可读性。
但是,由于PHP是弱类型的语言,使用类型声明又于PHP设计的初衷相悖。
到底使用还是不使用类型声明,大家见仁见智吧,本菜鸟不:).
问题内容: 只是好奇是否有一种方法可以在netbeans中为常规变量提供类型提示,以便intellisense可以选择。我知道您可以针对类属性,函数参数,返回类型等执行此操作,但是我不知道如何针对常规变量执行此操作。在您拥有可以返回不同对象类型(例如服务定位符)的方法的情况下,这确实有帮助。 例如: 之后使用$ someService的地方,netbeans将提供在Some_Service类中定义
问题内容: class Node: def append_child(self, node: Node): if node != None: self.first_child = node self.child_nodes += [node] 我该怎么办?因为当我运行它时,它说。 我应该只删除and实例在函数中检查它吗?但是,我该如何访问的属性(我希望它是类的实例)? 我不知道如何在Python,
本文向大家介绍PHP 类型提示类和接口,包括了PHP 类型提示类和接口的使用技巧和注意事项,需要的朋友参考一下 示例 在PHP 5中添加了有关类和接口的类型提示。 类类型提示 上面的脚本输出: 克里斯被爱丁堡大学录取 接口类型提示 上面的示例输出与之前相同: 克里斯被爱丁堡大学录取 自我类型提示 的self关键字可被用作一种类型的提示,以指示该值必须是一个声明所述方法的类的一个实例。
本文向大家介绍PHP中的类型约束介绍,包括了PHP中的类型约束介绍的使用技巧和注意事项,需要的朋友参考一下 PHP的类方法和函数中可实现类型约束,但参数只能指定类、数组、接口、callable 四种类型,参数可默认为NULL,PHP并不能约束标量类型或其它类型。 如下示例: 那么对于标量类型如何约束呢? PECL扩展库中提供了SPL Types扩展实现interger、float、bool、enu
问题内容: 我想允许使用Python 3进行类型提示,以接受某个类的子类。例如: 现在,当输入以下代码时: 我得到一个PyCharm IDE提示“期望的类型A,取而代之的是Type [B]。” 如何更改此处的类型提示以接受A的任何子类型? 据此(https://www.python.org/dev/peps/pep-0484/#type-definition- syntax ,“该类型的参数也接受
我希望允许使用Python 3进行类型提示以接受某个类的子类。例如。: 现在当键入以下代码时: 我收到一个 PyCharm IDE 提示“预期的类型 A,而是获得类型 [B]。 如何在这里更改类型提示以接受? 根据PEP 484(“类型为特定参数类型的子类型的表达式也可用于该参数。”),我知道我的解决方案< code>(cls: A)应该可以工作?