目錄結構:javascript
在這篇文章中,筆者將會講解如何使用PHP中的函數,PHP是一門弱語言類型,相比較於強語言類型(java、c++,c#等),在函數方面也提供了更大的靈活性。php
PHP中能夠經過func_get_args函數得到參數數組的信息,或者經過func_get_args得到參數的數目。
func_get_args得到的是目標參數的副本組成的數組。
看以下的案例:java
<?php function foo() { $numargs = func_num_args(); echo "參數數量 : $numargs \n"; if ($numargs >= 2) {//得到第二個參數的值 echo "第二個參數是: " . func_get_arg(1) . "\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "參數 $i 是: " . $arg_list[$i] . "\n"; } } foo(1, 2, 3); ?>
輸出:c++
參數數量 : 3
第二個參數是: 2
參數 0 是: 1
參數 1 是: 2
參數 2 是: 3
在PHP5.6及以上版本中,提供了...的語法格式來支持可變參數。web
<?php function add($a,$b){ return $a + $b; }; function subs($a,$b){ return $a - $b; }; $val = "add";//將函數名"add"賦給變量$val, 執行$val()時則調用函數add() echo $val(1,2)."\n";//3 $val = "subs";//將函數名"subs"賦給變量$val, 執行$val()時則調用函數subs() echo $val(1,2)."\n";//-1 ?>
<?php function cal($fun){ for($i = 0;$i < 100 ;$i++){ if( $fun($i) ){ echo $i."\n"; } } }; //若是是迴文數就返回true,不然false function val($num){ if($num == strrev($num)) return true; return false; } cal("val"); ?>
還能夠經過call_user_func_array函數來調用一個函數。c#
<?php namespace MyProject;//聲明命名空間MyProject class myClass{ function myfunc($arg1,$arg2){ echo " class name = ".__CLASS__."\n"; echo " function name = ".__FUNCTION__."\n"; echo " method name = ".__METHOD__."\n"; echo " file dir = ".__DIR__."\n"; echo " current line = ".__LINE__."\n"; echo " name space = ".__NAMESPACE__."\n"; echo " arg1 = ".$arg1."\n"; echo " arg2 = ".$arg2."\n"; } } $myClass = new namespace\myClass(); call_user_func_array(array($myClass,"myfunc"),array(1,2)); ?>
輸出結果以下:數組
class name = MyProject\myClass function name = myfunc method name = MyProject\myClass::myfunc file dir = C:\wamp\www current line = 10 name space = MyProject arg1 = 1 arg2 = 2
其中:
__CLASS__ 類名稱
__METHOD__ 方法名稱
__FUNCTION__ 函數名稱。
__DIR__ 文件目錄
__LINE__ 當前行
__NAMESPACE__ 命名空間
call_user_func_array只接受兩個參數,第一個是函數名,若是是引用類型,那麼就應該使用數組。第二個是一個數組參數。瀏覽器
自定義函數庫須要使用到include和require方法,這兩個方法均可以用於引入別的php文件。可是include方法在遇到錯誤後,腳本會繼續執行。require方法在引入文件遇到錯誤後,腳本不會繼續執行。
定義一個php文件,文件名爲test1.php:閉包
<?php echo "I come from another php file<br/>";
而後再定義一個文件,文件名test2.php:函數
<?php include 'test1.php'; echo "<hr/>"; echo "I am this file content";
而後經過web瀏覽器,會看到以下輸出結果:
在test2.php文件中成功引入了test1.php文件的內容。
require和include的功能相似,可是require在引入過程當中,遇到錯誤的話,會終止腳本的執行。
若是咱們執行以下代碼:
<?php include 'test3.php';
其中test3.php文件不存在,這時候include會產生警告。
若是換成require的話,就會產生致命錯誤。
include和require每包含一次文件就會執行文件中的內容,若是隻須要在最開始包含那次執行文件的內容,那麼就能夠用include_once()和require_once()方法。
PHP 5.3新添加了閉包的功能,PHP中的閉包目前和別的語言的閉包(好比javascript)不同,javascript能夠被認爲是一種做用域,它默認繼承父容器的做用域。然而在PHP中,必需手動綁定傳遞的參數。
看下面的案例:
<?php function Calc($frombase){ return function($number,$tobase) use($frombase){ return base_convert($number, $frombase, $tobase);//轉化爲指定進制 }; } //獲得一個從10進制開始轉化的匿名函數 $fun = Calc(10); print "binary = ".$fun(20,2)."\n"; print "octal = ".$fun(20,8)."\n"; print "hex = ".$fun(20,16)."\n"; ?>
輸出結果爲:
binary = 10100 octal = 24 hex = 14
在上面的代碼中使用use來傳遞在閉包中可以使用的父級屬性。如有多個父級屬性要在閉包中使用的話,那麼在這些屬性以前用逗號隔開就能夠了。