值通過使用可選的返回語句返回。可以返回包括數組和對象的任意類型。返回語句會立即中止函數的運行,並且將控制權交回調用該函數的代碼行
如果省略了 return,則返回值為 null。
<?php
function square($num)
{
return $num * $num;
}
echo square(5); // outputs '25'.
?>
函數不能返回多個值,但可以通過返回一個數組來得到類似的效果。
<?php
function small_numbers()
{
return [0, 1, 2];
}
// 使用短數組語法將数组中的值賦给一組變數
[$zero, $one, $two] = small_numbers();
// 在 7.1.0 之前,唯一相等的選擇是使用 list() 結構
list($zero, $one, $two) = small_numbers();
?>
從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用引用運算符 &
<?php
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
PHP 支持可變函數的概念。就是說如果一個變量名後有圓括號,PHP 就會先去尋找這個變數名稱的函數執行。可變函數可以用來實現包括回調函數,以及函數表在內的一些用途。
來看看範例
<?php
function foo() {
echo "In foo()<br />\n";
}
function bar($arg = '')
{
echo "In bar(); argument was '$arg'.<br />\n";
}
// 使用名為 echo 的函數
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
?>
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
?>
當調用靜態方法時,函數調用要比靜態屬性優先
<?php
class Foo
{
static $variable = 'static property';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.
?>
<?php
class Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar"
// 這樣可是會出錯的哦,沒有先實體化類別
$func = array("Foo", "baz");
$func(); // Uncaught Error: Non-static method Foo::baz() cannot be called statically in ....
?>
PHP 有很多標準的函數和結構。還有一些函數需要和特定地 PHP 擴展模塊一起編譯,否則在使用它們的時候就會得到一個致命的“未定義函數”錯誤。
例如要連接MySQL,要使用 mysqli_connect() 函數,就需要在編譯 PHP 的時候加上 MySQLi 支持。可以使用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加載了那些擴展庫