測試環境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25
int string float bool
。 <?php //PHP 7.0 declare(strict_types=1); //聲明嚴格類型 function sum(int $a, int $b) { return $a + $b; } var_dump(sum(1, 2)); var_dump(sum(1.5, 2.5)); //類型錯誤方法的參數類型約束為對象類型:
<?php class C {} class D extends C {} // This doesn't extend C. class E {} function f(C $c) { echo get_class($c)."/n"; } f(new C); f(new D); f(new E); //錯誤,參數必須是C的實例PHP5.6+版本支持可變數量的參數列表。在 PHP 5.5 及更早版本中,使用函數 func_num_args(),func_get_arg(),和 func_get_args() 。
<?php function sum(...$numbers) { $accum = 0; foreach ($numbers as $n) { $accum += $n; } return $accum; } echo sum(1, 2, 3, 4);使用默認參數時,任何默認參數必須放在任何非默認參數的右側;否則,函數將不會按照預期的情況工作。
<?php function makeyogurt($type = "acidophilus", $flavour){ return "Making a bowl of $type $flavour./n"; } echo makeyogurt("raspberry"); // won't work as expected可變函數不能用于例如 echo,PRint,unset(),isset(),empty(),include,require 以及類似的語言結構。
調用靜態方法時,函數調用要比靜態屬性優先。
<?phpclass Foo{ static $variable = 'static property'; static function Variable() { echo 'Method Variable called'; }}echo Foo::$variable; // This prints 'static property'. $variable = "Variable";Foo::$variable(); // This calls $foo->Variable()PHP 7.0 支持類調用方法為可變方法,而之前的版本則報錯。
<?phpnamespace Project/TestClass; class Test { static function funcToCall() { echo "test"; } }namespace Project/OtherTestClass; class OtherTest { static function callOtherFunc() { $func = '/Project/TestClass/Test::funcToCall'; $func(); } } echo OtherTest::callOtherFunc(); //outputs test匿名函數(Anonymous functions),也叫閉包函數(closures),允許臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。
閉包函數也可以作為變量的值來使用。PHP 會自動把此種表達式轉換成內置類 Closure 的對象實例。
<?php //PHP 7.0+ (function($name){ echo 'My name is ' . $name; })('Zhang San');閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。
<?php $fruits = ['apples', 'oranges']; $example = function () use ($fruits) { echo $fruits[0]; }; $example();PHP 5.4 $this
可用于匿名函數。
PHP 7.0 可以強制函數返回類型。語法為function FunctionName ($arg1, $arg2, ...) : TYPE { }
PHP 7.0 如果指定了返回類型,則不能為null.
<?phpdeclare(strict_types=1);function add2ints(int $x, int $y):int{ $z = $x + $y; if ($z===0){ return null; //返回類型錯誤 } return $z;}$a = add2ints(3, 4);echo is_null($a) ? 'Null' : $a;$b = add2ints(-2, 2);echo is_null($b) ? 'Null' : $b;exit();新聞熱點
疑難解答
圖片精選