1. 程式人生 > >php文檔知識點整理(函數、方法、文件加載)

php文檔知識點整理(函數、方法、文件加載)

進行 兩種 排序 嚴重 進入 接收 [1] pan $max

函數:

函數定義形式:

function 函數名 (形參1,形參2.... ){

}

函數參數:(2種)

形參:

1,形參一定是一個變量名!

2,該變量名只能是在該函數中有效的變量名;

3,而且只在該函數調用並執行時有效,函數結束,通常這些變量也就“銷毀”。

實參:

實參就是一個“實際數據”,

該數據可以是一個“直接數據”(比如5”abc”),也可以是一個變量中存儲的數據。

實參的作用是將其數據“賦值給”形參變量。

實參跟形參之間通常應該有個一一對應”關系:

定義形式: function 函數名(形參1,形參2...... ){ 。。。。}

調用形式: 函數名(實參1,實參2.....

默認值參數:

註意:

默認值不能是對象或資源類型;

默認值只能是常量表達式,或常量,不能是變量

定義時可以不給定形參,但調用時,卻又可以給定任何個數的實參。

在系統中,var_dump()這個函數也有同樣的使用效果:

var_dump($v1);

var_dump($v1, $v2, $v3); //也可以

這種應用的實現,是依賴與系統中的3個系統函數來達到的:

func_get_args(); //獲得一個函數所接收到的所有實參數據,並結果是一個數組

func_get_arg(n); //獲得一個函數所接收到的第n個實參數據(

n0開始)

func_num_args(); //獲得一個函數所接收到的所有實參數據的個數

定義函數:

function &函數名(形參1,形參2.....) //註意函數名前有個引用符號“&

{

$result = 0; //初始化

。。。。。。。

return $result; //此時返回數據,只能是變量

}

匿名函數:

表現1

$f1 = function(){。。。函數體;}

//這裏的匿名函數定義形式上沒有名字,但其實又將之賦值給了變量$f1

使用時,就跟“可變函數”一樣了:$v1 = $f1();

表現形式2

調用其他函數2匿名函數,實參

1,實參2...... );

說明:

1此形式的匿名函數只有定義的函數體(無函數名)

2此形式的匿名函數只能作為其他函數調用時的參數(其他函數通常有特定用處)

3此匿名函數會在調用其他函數的“過程中”被執行。

能夠使用(匿名)函數當作實參的函數,並不多!

其中有一個常見的是:call_user_func_array();

其使用形式為:

call_user_func_array(匿名函數,數組);

含義:

將數組的每一項當作該匿名函數的若幹個實參,傳遞到該匿名函數中,並執行該匿名函數,並可以從該匿名函數中返回數據。

變量的作用域:(4個)

通常說作用域,有2個:

局部作用域:只能在所定義的函數範圍內使用。

全局作用域:在函數的“外部”範圍使用。

——php中,局部和全局作用域是不重疊的

——js中,全局作用域是包括局部作用域的

但還有兩個:

超全局:就是在函數的內部和外部都可以使用。

超全局變量只有系統內部預定義的那幾個,我們不能再程序中創建超全局變量。

靜態局部作用域:其實也是局部,但多一個特征:數據能夠在函數退出後仍然保持不丟失。

局部訪問全局變量的特定語法:

在局部範圍內,使用global關鍵字對全局變量進行一次“聲明”,則就可以使用了:

語法:global $變量名;

實際上,函數中的global 語句,其實是創建了一個跟外部變量同名的局部變量,並通過“引用”的方式指向了外部變量的數據區

技術分享圖片
1 <?php
2     $v1=10;
3     function f3(){
4         global $v1;
5         echo "<br />v1 = $v1";
6         $v2=20;
7     }
8     f3();
9 ?>
舉例

$GLOBALS:

在函數中(局部範圍),使用$GLOBALS超全局數組來引用(使用)全局變量:

$GLOBALS超全局數組的作用是用於存儲所有全局變量的數據:變量名為下標,變量值為對應元素值。

全局訪問局部變量的特定語句:

通過引用傳遞的方式向形參傳遞一個引用實參變量

$v1 = 10;

function f1( &$p1, $p2){ ...... } //$p1是函數的形參,也即就是函數的內部(局部)變量

$v2 = f1( $v1, 10); //此時我們認為$v1就可以使用函數中$p1的值。

使用函數的引用返回形式:見前面引用傳遞的方式返回數據

函數中使用global關鍵字來首次引用一個全局變量,則函數結束後在全局範圍就可以使用該變量了

有關函數的系統函數:

function_exists():判斷某個函數是否被定義過,返回布爾值

if( function_exists(“ func1 “) == false ){

function func1(){。。。。。。}//定義函數

}

func_get_arg(n):獲得一個函數的第n個實參值(n從0開始)

func_get_args():獲得一個函數的所有實參,結果是一個數組

func_num_args():獲得一個函數的所有實參的個數。

有關函數的編程思想:

遞歸思想的一個基本形式是:在一個函數中,有至少一條語句,又會去調用該函數自身。

遞歸思想(遞歸函數)

1,很多問題,用遞歸和遞推都可以解決。

2,有些問題只能用遞歸。

3,如果兩種方法都可以解決,推薦使用遞推——效率高很多!

數組:

php中,數組的下標可以是整數,或字符串。

php中,數組的元素順序不是由下標決定,而是由其“加入”的順序決定。

多維數組的一般語法形式:

$v1 = 數組名[下標][下標][.....]

數組遍歷:

foreach( $arr as [ $key => ] $value ) //$key可以稱為鍵變量,$value可以稱為值變量。

{

//這裏就可以對$key $value 進行所有可能的操作——因為他們就是一個變量

//$key 代表每次取得元素的下標,可能是數字,也可以能是字符串

//$value 代表每次取得元素的值,可能是各種類型。

//此循環結構會從數組的第一項一直遍歷循環到最後一項,然後結束。

}

數組指針和遍歷原理:

舉例:$arr1 = array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)

下標:

2

‘dd’

1

3

0

值:

1

5

1.1

‘abc’

true

指針除了負責foreach循環的位置設定之外,還有其他一些函數也依賴於該指針:

1$v1 = current( $arr1); //取得$arr1中當前指針所指向的元素的值,如果沒有指向元素,則為false

2$v1 = key$arr1); //取得$arr1中當前指針所指向的元素的下標,。。。。。false

3$v1 = next($arr1 ) //將指針移向“下一個元素”,然後取得該下一個元素的值;

4$v1 = prev($arr1) //將指針移向“上一個元素”,然後取得該上一個元素的值

5$v1 = reset($arr1); //將指針移向“第一個元素”,然後取得該元素的值——數組指針初始化

6$v1 = end($arr1); //將指針移向“最後一個元素”,然後取得該元素的值

7$v1 = each($arr1) //取得當前元素的下標和值,然後移動指針到下一個位置。

for+next+reset遍歷數組:

reset( $arr1 ); //重置數組,即:數組指針初始化,這裏,返回的數據被“丟棄”了。

$len = count( $arr1);

for$i = 0; $i < $len $i++){

$key = key ($arr1 ); //下標

$value = current( $arr1 ); //

//然後這裏就可以對$key $value進行任何作為變量的操作

next($arr1);//這裏,移動指針到下一個元素(也同時丟棄了返回值)

}

while+each()+list()遍歷數組:

each()函數解釋:

each()函數可以取得一個數組中的一個元素的下標和值,然後再放入一個新的數組中,並且指針後移一位。

該新的數組,有4個元素,但存儲的是下標和值的“雙份”,類似下述形式:

array(

1 => 取出來的值,

‘value’ = >取出來的值,

0 = > 取出來的下標(鍵名),

‘key’ => 取出來的下標(鍵名)

);

list()函數解釋:

使用形式:

list($v1, $v2, $v3,$v4 .... = 數組$arr1;

其作用是:依次取得數組$arr1中下標為0123, ....的元素的值,並一次性放入多個變量中(一一對應)

即其相當於如下語句:

$v1 = $arr1[0];

$v2 = $arr1[1];

$v3 = $arr1[2];

$v4 = $arr1[3];

..........

但是註意:只能實現這樣的“從0開始的連續數字下標的元素的取值”(但並非要求數組的元素的順序為同樣的數字順序)

foreach默認是原數組上進行遍歷。但如果在遍歷過程中對數組進行了某種修改或某種指針性操作(就是指前面的指針函數),則會復制數組後在復制的數組上繼續遍歷循環。

技術分享圖片
 1 <?php
 2 //    $arrpao = array(8,10,26,15,30,13);
 3 //    $changdu = count($arrpao);
 4 //    echo "<br>排序之前";
 5 //        var_dump($arrpao);
 6 //    for($i=0;$i<$changdu-1;++$i){
 7 //        $max =$arrpao[0];
 8 //        $xia =0;
 9 //        for($k=0;$k<$changdu-$i-1;++$k){
10 //            if($arrpao[$k]>$arrpao[$k+1]){
11 //                $a = $arrpao[$k];
12 //                $arrpao[$k]=$arrpao[$k+1];
13 //                $arrpao[$k+1]=$a;
14 //            }
15 //        }
16 //    }
17 //    echo "<br />排序之後:";
18 //    var_dump($arrpao);
19 ?>
冒泡案例

文件加載

1.有4個文件加載的語法形式(註意,不是函數):

include , include_once , require , require_once;

1,如果加載文件失敗,則有不同的處理規則;includerequire不同

2,如果加載文件重復,則有不同的處理規則;XXXXXX_once不同;

3,他們都是語法結構,而非函數,使用形式可以有兩種:

3.1 include + ‘文件路徑’; 或者 include + (‘文件路徑’);

文件路徑問題:(有3種)

1.相對路徑

相對路徑就是以./”, 或“../”,開頭的路徑。

./ 表示當前網頁文件的所在位置(文件夾,目錄);

../ 表示當前網頁文件的所在位置的上一級位置(文件夾,目錄)

/ 表示根目錄文件

這種相對位置對一個網站中的所有內容(包括phphtml,圖片,cssjs文件)都有效。

2.絕對路徑(2種)

1.本地絕對路徑:

window系統: c:/d1/d2/page3.php

unix系列系統: /d1/d2/page3.php

2.網絡絕對路徑: http://www.abc.com/d1/d2/page4.php

3.只有文件名(無路徑)

1.在php.ini配置文件中,有:include_path設定:

我們也可以在腳本中設定:

設置載入文件:set-include-path(‘文件路徑’)

技術分享圖片

獲取載入文件:get-include-path(‘文件路徑’)

技術分享圖片

我們也可以使用另一個函數來獲取當前的include_path的值:

技術分享圖片

2,上面沒找到,在當前執行的網頁文件所在目錄(所謂當前工作目錄)查找:

所謂當前網頁文件,就是地址欄中顯示的那個文件名。

3,上面還沒找到,則在當前include命令所在文件的所在目錄中查找:

如果一個文件(A)包含文件B,在文件B中又有include命令包含文件C

此時B中的路徑問題就可能發生這種情況。

文件載入執行過程

1.從include語句處退出php腳本模式(進入html代碼模式)

2.載入include語句所設定的文件中的代碼,並執行之(如同在當前文件中一樣)

3.退出html模式重新進入php腳本模式,繼續之後的代碼

技術分享圖片
1 <?php
2     echo "<p>代碼(1)</p>"  
3 ?>
4     include ‘文件路徑‘
5 
6 <?php
7     echo "<p>代碼(1)</p>"  
8 ?>
舉例:

技術分享圖片

四種加載方法的區別:

1.include_once 和include的區別:前者能夠保證不會被重復加載

2.require 和 include的區別:

如果被包含文件不存在,即引用失敗(出錯)時,include發出警告並繼續執行後續代碼require直接終止。

技術分享圖片

require_once 和 require的區別:前者能夠保證不會被重復加載。

return關鍵字

return的作用是:結束函數,並可以返回數據;

技術分享圖片
 1 1.<?php
 2     echo "<p>主文件中第一行</p>";
 3 
 4     include‘header2.php‘;
 5 
 6     echo"<p>主文件中第2行</p>";
 7 ?> 
 8 
 9 
10 2.<?php
11     echo "header2中第一行<br />";
12     echo "header2中第2行<br />";
13     return;
14     echo "header2中第3行<br />";
15 ?>
舉例 兩個PHP中

結果:

技術分享圖片

return返回值的形式:

技術分享圖片
1.<?php
    echo "<p>主文件中第一行</p>";
    $n = include ‘header2.php‘;//將加載文件執行的結果返回給$n
    echo "<p>主文件中第2行</p>";
    echo "<p>主文件中 n =$n </p>";
?>




2.<?php
    $m = 10;
    echo "header2中第一行<br />";
    echo "header2中第2行<br />";
    return $m;
    echo "header2中第3行<br />";
?>
舉例 2個php

結果:

技術分享圖片

錯誤處理

語法錯誤:

程序沒法運行,直接提示語法錯誤。

運行時錯誤:

只有程序運行到某行,或在某些特定的情形下運行才會發生的錯誤。

邏輯錯誤:

程序從頭到尾運行都沒有發生(並提示)錯誤,但程序運行計算的結果是錯誤的。

我們程序員主要面對的和要處理(應付)的錯誤,就是運行時錯誤。

系統錯誤:

E_ERROR:系統嚴重錯誤

一發生,程序立即停止執行。

該錯誤一般希望馬上。

E_WARNING:系統警告

一發生,提示錯誤,並繼續執行。

通常該錯誤希望能夠在“下一工作日”去處理掉(解決)。

E_PARSE:語法錯誤

一發生,提示錯誤,而且代碼完全不會運行——在運行之前先檢查語法。

E_NOTICE:系統提示

一發生,提示錯誤,並繼續執行。

發個郵件通知一下,自己安排時間有空去解決。

他們的本質是:

技術分享圖片
1 <?php
2 echo "<br />E_ERROR = ".E_ERROR;    
3 echo "<br />E_WARNING = ".E_WARNING;    
4 echo "<br />E_PARSE = ".E_PARSE;    
5 echo "<br />E_NOTICE = ".E_NOTICE;    
6 ?>
他們的本質:

技術分享圖片

可見他們只是一個系統內部常量(整數常量);

用戶自定義錯誤:(3個)

E_USER_ERROR;

E_USER_WARNING;

E_USER_NOTICE;

人工觸發:

trigger_error(“錯誤提示 用戶錯誤代號);

錯誤的顯示控制:

設定是否顯示:display_error:

php.ini中;display_error = On; //表示顯示, Off表示不顯示;

php文檔知識點整理(函數、方法、文件加載)