php:声明Function的参数类型

时间:2012-01-22 16:54:47

标签: php function arguments

我正在尝试使用声明的参数类型创建一个函数,以快速检查它们是否采用正确的格式,但是当它返回一个字符串时我会出现此错误:

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);

错误在哪里?

7 个答案:

答案 0 :(得分:40)

根据the PHP5 documentation

  

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

由于stringint不是类,因此您无法在函数中“键入”它们。

从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)

stringint和其他内置类型不是,在参数中指定。唯一支持的内置类型是array

答案 4 :(得分:0)

您无法将类型定义为stringint。 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);