程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 前端學PHP之函數,學PHP之函數

前端學PHP之函數,學PHP之函數

編輯:關於PHP編程

前端學PHP之函數,學PHP之函數


×
目錄
[1]函數定義 [2]函數參數[3]返回值[4]變量函數[5]回調函數[6]遞歸函數[7]加載函數[8]匿名函數

前面的話

  PHP 的真正力量來自它的函數:它擁有超過 1000 個內建的函數。本文將詳細介紹php函數

  [注意]關於javascript函數的詳細內容移步至此

 

函數定義

  除了內建的 PHP 函數,可以創建我們自己的函數。函數是可以在程序中重復使用的語句塊。頁面加載時函數不會立即執行。函數只有在被調用時才會執行。

  用戶定義的函數聲明以關鍵字 "function" 開頭,函數名和 PHP 中的其它標識符命名規則相同。有效的函數名以字母或下劃線打頭,後面跟字母,數字或下劃線

function functionName() {
  被執行的代碼;
}
<?php
function writeMsg() {
  echo "Hello world!";
}
writeMsg(); // 調用函數
?>

 

函數參數

  可以通過參數向函數傳遞信息,參數類似變量。參數被定義在函數名之後,括號內部。可以添加任意多參數,只要用逗號隔開即可

<?php
function familyName($fname) {
  echo "$fname Zhang.<br>";
}

familyName("Li");
familyName("Hong");
familyName("Tao");
familyName("Xiao Mei");
familyName("Jian");
?>

引用傳遞

  默認情況下,函數參數通過值傳遞。如果希望允許函數修改它的參數值,必須通過引用傳遞參數

  如果想要函數的一個參數總是通過引用傳遞,可以在函數定義中該參數的前面加上符號 &

<?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++ 風格的標量參數默認值

<?php
function setHeight($minheight=50) {
  echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // 將使用默認值 50
setHeight(135);
setHeight(80);
?>

  PHP 還允許使用數組 array 和特殊類型 NULL 作為默認參數

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

  [注意]當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;否則,函數將不會按照預期的情況工作

可變參數

【func_get_args()】

  func_get_args()相當於javascript函數中的arguments,以數組形式保存著實參

function demo(){
    $arr = func_get_args();
    $sum = 0;
    for($i = 0; $i<count($arr); $i++){
        $sum += $arr[$i];
    }
    return $sum;
}
//45
echo demo(1,2,3,4,5,6,7,8,9);

  此外,還有兩個常用的函數func_num_args()和func_get_arg() 

  func_num_args()函數返回參數總數 

  func_get_arg()函數接收一個數字參數,返回指定參數

function more_args() {           
    for($i=0; $i<func_num_args(); $i++) { 
        echo "第".$i."個參數是".func_get_arg($i)."<br>";
    }
}
more_args("one", "two", "three", 1, 2, 3); 

 

返回值

  如需使函數返回值,使用 return 語句。如果省略了return,則返回值為 NULL

<?php
function sum($x,$y) {
  $z=$x+$y;
  return $z;
}

echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>

 

變量函數

  變量函數也叫可變函數。如果一個變量名後有圓括號,PHP 將尋找與變量的值同名的函數,並且嘗試執行它。可變函數可以用來實現包括回調函數,函數表在內的一些用途

  [注意]可變函數不能用於例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語言結構。需要使用自己的包裝函數來將這些結構用作可變函數

<?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()
?>

 

回調函數

  回調函數是指將一個函數的函數名作為參數傳到另一個函數中,這個函數被稱為回調函數

function demo($num,$n){
    for($i=0;$i<$num;$i++){
        if($n($i)){
            echo $i.'<br>';
        }
    }
}

function test($i){
    if($i%5){
        return true;
    }
}

demo(20,'test');

call_user_func_array

  使用call_user_func_array可以調用回調函數,並把一個數組參數作為回調函數的參數

mixed call_user_func_array ( callable $callback , array $param_arr )

  把第一個參數作為回調函數(callback)調用,把參數數組作(param_arr)為回調函數的的參數傳入

function demo($num,$n){
    for($i=0;$i<$num;$i++){
        if(call_user_func_array($n,array($i))){
            echo $i.'<br>';
        }
    }
}

function test($i){
    if($i%5){
        return true;
    }
}

demo(20,'test');

  實現回調函數時,通常要使用call_user_func_array()函數,而不是變量函數,因為變量函數無法傳遞對象中的方法或和類中的靜態方法

function demo($num, $n) {
    for($i=0; $i<$num; $i++) {
        if(call_user_func_array($n, array($i))){
            echo $i."<br>";
        }    
    }
}
    
class Filter {
    function one($i) {
        if($i%3==0) {
            return true;
        }
    }
    static function two($i) {
        if(preg_match('/3/', $i)) {
            return true;
        }
    }

}
demo(500, array(new Filter(), "one"));
demo(500, array("Filter", "two"));

 

遞歸函數

  在函數中調用自己就是遞歸函數

<?php
    function test( $n ) {            
        echo $n; 
        if($n>0){
            test($n-1);                   
        }   
        echo $n; 
    }
    test(5);//543210012345
?>

 

加載函數庫

  使用include()函數來引入外部文件

test.php
function one(){
    echo '111';
}

<?php
include ('test.php');
one();//111
?>

  但如果不慎引入多次,使得函數重定義,變量重新賦值,會造成錯誤

test.php
function one(){
    echo '111';
}

<?php
include ('test.php');
include ('test.php');
one();//111
?>

  此時,需要使用include_once()函數,來保證相同的文件只被引入一次

test.php
function one(){
    echo '111';
}

<?php
include_once('test.php');
include_once('test.php');
one();//111
?>

require()

  引入外部文件,還可以使用require()。include( )與require( )幾乎等價,區別在於在腳本執行時包含,當處理失敗時,include( )產生一個警告而require( )則導致一個致命錯誤

  [注意]require_once()與include()_once也類似

 

匿名函數

  匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值

  其實,php的匿名函數類似於javascript中的函數表達式

  [注意]匿名函數結尾一定要加分號,否則會報錯

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>

閉包

  PHP閉包實現主要就是靠匿名函數

  將匿名函數在普通函數中當做參數傳入,也可以被返回。這就實現了一個簡單的閉包。

  閉包的兩個特點:

  1、作為一個函數變量的一個引用 - 當函數返回時,其處於激活狀態。

  2、一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。

  其實上面兩點可以合成一點,就是閉包函數返回時,該函數內部變量處於激活狀態,函數所在棧區依然保留

  閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去

$message = 'hello';

$example = function () use ($message) {
    var_dump($message);
};
echo $example();//string 'hello' (length=5)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved