PHP實踐之路(七)PHP函式
PHP函式
1、函式名
a、函式名以字母或下劃線打頭,後面跟字母,數字或下劃線(大小寫無關)
b、所有函式和類都具有全域性作用域,可以在內部定義外部呼叫,反之亦然。
c、不支援函式過載,也不可能取消定義或者重定義已宣告的函式
d、函式的呼叫必須是先定義後使用
e、任何有效的 PHP 程式碼都有可能出現在函式內部,甚至包括其它函式和類定義
接下來實驗一下
<?php
function foo(){
echo "Hello World<br />";
}
foo(); //函式的呼叫,輸出Hello World
/*
此處函式重複定義,因為函式名大小寫無關,所以函式foo和函式FOO被認為是同一個函式,編譯
報錯:Fatal error: Cannot redeclare FOO()
function FOO(){
echo "do something";
}
*/
function outer(){
echo "outer function executed..<br />";
//函式內部定義函式
function inner(){
echo "inner function executed..<br />";
}
}
//如果根據函式呼叫必須是先定義的規則,如果我們直接呼叫inner()函式將出錯
//inner(); //此處出錯:Fatal error: Call to undefined function inner()
//如果我們先呼叫outer()函式,然後再呼叫innner()函式就好了,呼叫outer()後,inner()函式將被認為是已定義
outer(); //輸出 outer function executed..
inner(); //函式具有全域性作用域,內部定義外部也可以使用。輸出 inner function executed..
?>
2、函式引數
a、函式引數的傳遞有三種方式:按值傳遞、引用傳遞和預設引數三種
b、任何預設引數必須放在任何非預設引數的右側
c、可變引數列表,支援不固定引數個數及型別的引數傳遞方式。可變引數列表方式必須使用func_num_args(),func_get_arg() 以及func_get_args()三個函式
針對以上知識點,我們動動手吧
<?php
//按值傳遞引數
function sayHello($name){
$name="[".$name."]"; //修改$name的值
echo "Hello ".$name."<br />";
}
$name = "jack";
sayHello($name); //輸出Hello [jack]
echo $name; //$name沒有發生變化,輸出jack
echo "<br />"; //換行
//引用傳遞
function sayHello2(&$name){
$name="[".$name."]"; //修改$name的值
echo "Hello ".$name."<br />";
}
sayHello2($name); //輸出Hello [jack]
echo $name; //$name已經發生了變化,輸出[jack]
echo "<br />"; //換行
//預設引數
function sayHello3($name = "somebody"){
$name="[".$name."]"; //修改$name的值
echo "Hello ".$name."<br />";
}
sayHello3(); //採用預設引數值,輸出Hello [somebody]
sayHello3("lucy"); //採用傳遞的引數值,輸出Hello [lucy]
//任何預設引數必須放在任何非預設引數的右側
/*
以下函式的定義將導致呼叫sayMore("How do you do");出錯,它預設將傳入的引數
賦值給了$name,而$more的值確遺失了
function sayMore($name = "somebody",$more){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
*/
function sayMore($more,$name = "somebody"){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
sayMore("How do you do"); //輸出Hello [somebody] How do you do
//以下測試可變參列表的使用
function showFamilyMembers(){
$num = func_num_args(); //通過func_num_args()函式獲取引數的數量
for($i=0;$i<$num;$i++){
echo func_get_arg($i); //通過func_get_arg()函式獲取具體某個引數的值
echo " ";
}
echo "<br />"; //換行
}
showFamilyMembers("jack","lucy"); //輸出:jack lucy
showFamilyMembers("jack","lucy","lily"); //輸出:jack lucy lily
//第二種方式獲取引數列表
function showFamilyMembers2(){
$members=func_get_args(); //通過func_get_args()函式獲取引數列表
foreach($members as $member){
echo $member;
echo " ";
}
echo "<br />"; //換行
}
showFamilyMembers2("jack","lucy"); //輸出:jack lucy
showFamilyMembers2("jack","lucy","lily"); //輸出:jack lucy lily
?>
3、函式返回值
a、函式只能返回一個值,如果需要返回多個值時可以採用返回陣列的方式
b、從函式返回一個引用,必須在函式宣告和指派返回值給一個變數時都使用引用操作符 &
函式的返回值這塊相對比較簡單,需要了解的內容也比較少,接下來簡單測試一下
<?php
function getOneColor(){
return "red"; //返回一個值
}
function getMoreValue(){
$arr=array("red","blue","orange"); //返回多個值
return $arr;
}
echo(getOneColor()); //輸出val1
echo "<br />";
var_dump(getMoreValue());
/*輸出
array (size=3)
0 => string 'red' (length=3)
1 => string 'blue' (length=4)
2 => string 'orange' (length=6)
*/
echo "<br />";
/********以下測試返回引用***********/
class test {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new test;
$myValue = &$obj->getValue();
echo $myValue; // 輸出42
echo "<br />";
$obj->value = 2;
echo $myValue; // 輸出2
?>
4、可變函式
a、變數後面跟上圓括號,PHP 將尋找與變數的值同名的函式,並且嘗試執行它
b、可變函式一般用來實現函式的回撥
實驗時間
<?php
function sayHello($name = "somebody"){
echo "Hello ".$name;
}
$func="sayHello";
$func(); //輸出Hello somebody
echo "<br />"; //換行
$func("jack"); //輸出Hello jack
?>
版權宣告:本文為博主原創文章,未經博主允許不得轉載。
相關文章
- PHP實踐之路(目錄索引)PHP索引
- PHP實踐之路(三)PHP初探資料型別PHP資料型別
- PHP實踐之路(四)PHP中常量和變數PHP變數
- PHP實踐之路(六)控制結構PHP
- PHP實踐之路(十)類與物件(3)PHP物件
- PHP實踐之路(八)類與物件(1)PHP物件
- PHP實踐之路(九)類與物件(2)PHP物件
- PHP 第七週函式學習記錄PHP函式
- php函式PHP函式
- PHP 函式PHP函式
- php 函式PHP函式
- Golang實現PHP常用函式GolangPHP函式
- Go實現PHP常用函式GoPHP函式
- PHP 常用函式PHP函式
- PHP匿名函式PHP函式
- PHP常用函式PHP函式
- PHP函式大全PHP函式
- PHP字串函式PHP字串函式
- php函式案例PHP函式
- PHP extract() 函式PHP函式
- [php]unset函式PHP函式
- php’sfopen()函式PHP函式
- ord函式-php函式PHP
- php’sexplode()函式PHP函式
- 嵌入式PHP的探索實踐PHP
- PHP實踐之路(二)apache虛擬主機配置PHPApache
- PHP:常用PHP陣列操作函式PHP陣列函式
- PHP中實現函式過載PHP函式
- PHP內建字串函式實現PHP字串函式
- 類函式和物件函式 PHP函式物件PHP
- PHP 匿名函式初探PHP函式
- php 函式簡介PHP函式
- PHP常用函式大全PHP函式
- php函式瑣記PHP函式
- PHP常用函式篇PHP函式
- php 可變函式PHP函式
- php 內建函式PHP函式
- PHP 時間函式PHP函式