我正在尝试使用声明的参数类型创建一个函数,以快速检查它们是否采用正确的格式,但是当它返回一个字符串时我会出现此错误:
Catchable fatal error: Argument 2 passed to myfunction() must be an instance of string, string given, called in path_to_file on line 69 and defined in path_to_file on line 49
实施例
function myfunction( array $ARRAY, string $STRING, int $INTEGER ) {
return "Args format correct";
}
myfunction(array("1",'2','3','4'), "test" , 1234);
错误在哪里?
答案 0 :(得分:40)
类型提示只能是对象和数组(自PHP 5.1以来)类型。不支持使用int和string的传统类型提示。
由于string
和int
不是类,因此您无法在函数中“键入”它们。
从PHP 7.0开始,将参数类型声明为字符串,支持int,float,bool。
答案 1 :(得分:9)
这对于自PHP 7可用性以来看过这篇文章的人来说非常有用
使用PHP 7,现在可以声明类型。您可以参考以下链接获取更多信息。
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
function(string $name, boolean $is_admin) {
//do something
}
答案 2 :(得分:7)
你可以做这样一直对我有用的事情
表示字符串
function setData($Name=""){ }
这会强制名称为字符串,不会检查其是否为字符串
表示数值
function setData($age=0){ }
这会强制年龄为数字,如果传递一个字符串,则该值为0
对于数组值,有两个变体
function setData(array $data){ }
如果没有传递数组,则会抛出错误
function setData($data=array()){ }
这将为$data
答案 3 :(得分:1)
string
,int
和其他内置类型不是类,在参数中指定类。唯一支持的内置类型是array
。
答案 4 :(得分:0)
您无法将类型定义为string
和int
。 PHP“不知道”它们是什么。
答案 5 :(得分:0)
如果您没有使用PHP 7.x或需要一些复杂的参数验证(例如"数组或\ Traversable"因为您可以遍历数组但它们是原始类型并且不实现\ Traversable界面)您可以使用args中的Non-standard PHP library (NSPL)模块。
use const \nspl\args\numeric;
use function \nspl\args\expects;
function sqr($x)
{
expects(numeric, $x);
return $x * $x;
}
sqr('hello world');
输出:
InvalidArgumentException: Argument 1 passed to sqr() must be numeric, string given in /path/to/example.php on line 17
Call Stack:
0.0002 230304 1. {main}() /path/to/example.php:0
0.0023 556800 2. sqr() /path/to/example.php:17
答案 6 :(得分:0)
当我需要使用Type Hints时,我这样做:
<?php
declare(strict_types=1);