�����IJ���

ͨ�������б���Դ�����Ϣ�����������Զ�����Ϊ�ָ����ı��ʽ�б������Ǵ���������ֵ�ġ�

PHP ֧�ְ�ֵ���ݲ�����Ĭ�ϣ���ͨ�����ô��ݲ����Լ�Ĭ�ϲ�����Ҳ֧���ɱ䳤�Ȳ����б���

Example #1 ������������

<?php
function takes_array($input)
{
    echo 
"$input[0] + $input[1] = "$input[0]+$input[1];
}
?>

ͨ�����ô��ݲ���

Ĭ������£���������ͨ��ֵ���ݣ������ʹ�ں����ڲ��ı������ֵ����������ı亯���ⲿ��ֵ�������ϣ���������޸����IJ���ֵ������ͨ�����ô��ݲ�����

�����Ҫ������һ����������ͨ�����ô��ݣ������ں��������иò�����ǰ����Ϸ��� &��

Example #2 �����ô��ݺ�������

<?php
function add_some_extra(&$string)
{
    
$string .= 'and something extra.';
}
$str 'This is a string, ';
add_some_extra($str);
echo 
$str;    // outputs 'This is a string, and something extra.'
?>

Ĭ�ϲ�����ֵ

�������Զ��� C++ ���ı�������Ĭ��ֵ��������ʾ��

Example #3 �ں�����ʹ��Ĭ�ϲ���

<?php
function makecoffee($type "cappuccino")
{
    return 
"Making a cup of $type.\n";
}
echo 
makecoffee();
echo 
makecoffee(null);
echo 
makecoffee("espresso");
?>

�������̻������

Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.

PHP ������ʹ������ array ���������� NULL ��ΪĬ�ϲ��������磺

Example #4 ʹ�÷DZ���������ΪĬ�ϲ���

<?php
function makecoffee($types = array("cappuccino"), $coffeeMaker NULL)
{
    
$device is_null($coffeeMaker) ? "hands" $coffeeMaker;
    return 
"Making a cup of ".join(", "$types)." with $device.\n";
}
echo 
makecoffee();
echo 
makecoffee(array("cappuccino""lavazza"), "teapot");
?>

Ĭ��ֵ�����dz������ʽ��������������������Ա�����ߺ������õȡ�

ע�⵱ʹ��Ĭ�ϲ���ʱ���κ�Ĭ�ϲ�����������κη�Ĭ�ϲ������Ҳࣻ���򣬺��������ᰴ��Ԥ�ڵ������������������Ĵ���Ƭ�ϣ�

Example #5 ����Ĭ�ϲ����IJ���ȷ�÷�

<?php
function makeyogurt($type "acidophilus"$flavour)
{
    return 
"Making a bowl of $type $flavour.\n";
}

echo 
makeyogurt("raspberry");   // won't work as expected
?>

�������̻������

Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Making a bowl of raspberry .

���ڣ��Ƚ���������Ӻ�������ӣ�

Example #6 ����Ĭ�ϲ�����ȷ���÷�

<?php
function makeyogurt($flavour$type "acidophilus")
{
    return 
"Making a bowl of $type $flavour.\n";
}

echo 
makeyogurt("raspberry");   // works as expected
?>

�������̻������

Making a bowl of acidophilus raspberry.

Note: �� PHP 5 �𣬴����õIJ���Ҳ������Ĭ��ֵ��

��������

Note:

��PHP 5�У���������Ҳ����Ϊ������ʾ��

���������������ڵ���ʱҪ�����Ϊ�ض����͡� ���������ֵ���Ͳ��ԣ���ô�������һ������ ��PHP 5�У��⽫��һ���ɻָ����������󣬶���PHP 7�н����׳�һ��TypeError�쳣��

Ϊ��ָ��һ����������������Ӧ�üӵ�������ǰ�������������ͨ����������Ĭ��ֵ��ΪNULL��ʵ��������NULL��

Valid types

Type Description Minimum PHP version
Class/interface name The parameter must be an instanceof the given class or interface name. PHP 5.0.0
self The parameter must be an instanceof the same class as the one the method is defined on. This can only be used on class and instance methods. PHP 5.0.0
array The parameter must be an array. PHP 5.1.0
callable The parameter must be a valid callable. PHP 5.4.0
bool The parameter must be a boolean value. PHP 7.0.0
float The parameter must be a floating point number. PHP 7.0.0
int The parameter must be an integer. PHP 7.0.0
string The parameter must be a string. PHP 7.0.0
Warning

Aliases for the above scalar types are not supported. Instead, they are treated as class or interface names. For example, using boolean as a parameter or return type will require an argument or return value that is an instanceof the class or interface boolean, rather than of type bool:

<?php
 
function test(boolean $param) {}
 
test(true);
 
?>

�������̻������

 Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
 

����

Example #7 Basic class type declaration

<?php
class {}
class 
extends {}

// This doesn't extend C.
class {}

function 
f(C $c) {
    echo 
get_class($c)."\n";
}

f(new C);
f(new D);
f(new E);
?>

�������̻������

C
D

Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in - on line 14 and defined in -:8
Stack trace:
#0 -(14): f(Object(E))
#1 {main}
  thrown in - on line 8

Example #8 Basic interface type declaration

<?php
interface { public function f(); }
class 
implements { public function f() {} }

// This doesn't implement I.
class {}

function 
f(I $i) {
    echo 
get_class($i)."\n";
}

f(new C);
f(new E);
?>

�������̻������

C

Fatal error: Uncaught TypeError: Argument 1 passed to f() must implement interface I, instance of E given, called in - on line 13 and defined in -:8
Stack trace:
#0 -(13): f(Object(E))
#1 {main}
  thrown in - on line 8

Example #9 Nullable type declaration

<?php
class {}

function 
f(C $c null) {
    
var_dump($c);
}

f(new C);
f(null);
?>

�������̻������

object(C)#1 (0) {
}
NULL

�ϸ�����

Ĭ������£�����������Ļ���PHP����ǿ�ȴ������͵�ֵתΪ���������ı������͡� ���磬һ��������һ������������string�����������integer�����պ����õ��Ľ�����һ��string���͵�ֵ��

���Ի���ÿһ���ļ������ϸ�ģʽ�����ϸ�ģʽ�У�ֻ��һ��������������ȫ����ı����Żᱻ���ܣ����򽫻��׳�һ��TypeError�� Ψһ��һ�������ǿ��Խ�integer����һ������float�ĺ�����

ʹ�� declare ����strict_types �����������ϸ�ģʽ��

Caution

�����ϸ�ģʽͬʱҲ��Ӱ������ֵ��������.

Note:

�ϸ������������������ϸ�ģʽ���ļ����ĺ������ã����������Ǹ��ļ��������ĺ����� һ��û�������ϸ�ģʽ���ļ��ڵ�����һ���������ϸ�ģʽ���ļ��ж���ĺ�������ô������ѭ�����ߵ�ƫ�ã������ͣ��������ֵ���ᱻת����

Note:

�ϸ����ͽ����ڱ�������������Ҳ������Ϊ��ˣ�����ҪPHP 7.0.0 ����°汾����Ϊ������������Ҳ�����Ǹ��汾����ӵġ�

Example #10 Strict typing

<?php
declare(strict_types=1);

function 
sum(int $aint $b) {
    return 
$a $b;
}

var_dump(sum(12));
var_dump(sum(1.52.5));
?>

�������̻������

int(3)

Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 9 and defined in -:4
Stack trace:
#0 -(9): sum(1.5, 2.5)
#1 {main}
  thrown in - on line 4

Example #11 Weak typing

<?php
function sum(int $aint $b) {
    return 
$a $b;
}

var_dump(sum(12));

// These will be coerced to integers: note the output below!
var_dump(sum(1.52.5));
?>

�������̻������

int(3)
int(3)

Example #12 Catching TypeError

<?php
declare(strict_types=1);

function 
sum(int $aint $b) {
    return 
$a $b;
}

try {
    
var_dump(sum(12));
    
var_dump(sum(1.52.5));
} catch (
TypeError $e) {
    echo 
'Error: '.$e->getMessage();
}
?>

�������̻������

int(3)
Error: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 10

�ɱ������IJ����б�

PHP ���û��Զ��庯����֧�ֿɱ������IJ����б��� PHP 5.6 �����ϵİ汾�У��� ... �﷨ʵ�֣��� PHP 5.5 ������汾�У�ʹ�ú��� func_num_args()��func_get_arg()���� func_get_args() ��

... in PHP 5.6+

In PHP 5.6 and later, argument lists may include the ... token to denote that the function accepts a variable number of arguments. The arguments will be passed into the given variable as an array; for example:

Example #13 Using ... to access variable arguments

<?php
function sum(...$numbers) {
    
$acc 0;
    foreach (
$numbers as $n) {
        
$acc += $n;
    }
    return 
$acc;
}

echo 
sum(1234);
?>

�������̻������

10

You can also use ... when calling functions to unpack an array or Traversable variable or literal into the argument list:

Example #14 Using ... to provide arguments

<?php
function add($a$b) {
    return 
$a $b;
}

echo 
add(...[12])."\n";

$a = [12];
echo 
add(...$a);
?>

�������̻������

3
3

You may specify normal positional arguments before the ... token. In this case, only the trailing arguments that don't match a positional argument will be added to the array generated by ....

It is also possible to add a type hint before the ... token. If this is present, then all arguments captured by ... must be objects of the hinted class.

Example #15 Type hinted variable arguments

<?php
function total_intervals($unitDateInterval ...$intervals) {
    
$time 0;
    foreach (
$intervals as $interval) {
        
$time += $interval->$unit;
    }
    return 
$time;
}

$a = new DateInterval('P1D');
$b = new DateInterval('P2D');
echo 
total_intervals('d'$a$b).' days';

// This will fail, since null isn't a DateInterval object.
echo total_intervals('d'null);
?>

�������̻������

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2

Finally, you may also pass variable arguments by reference by prefixing the ... with an ampersand (&).

Older versions of PHP

No special syntax is required to note that a function is variadic; however access to the function's arguments must use func_num_args(), func_get_arg() and func_get_args().

The first example above would be implemented as follows in PHP 5.5 and earlier:

Example #16 Accessing variable arguments in PHP 5.5 and earlier

<?php
function sum() {
    
$acc 0;
    foreach (
func_get_args() as $n) {
        
$acc += $n;
    }
    return 
$acc;
}

echo 
sum(1234);
?>

�������̻������

10