1. 程式人生 > 實用技巧 >PHP作用域 遞迴 包含檔案 錯誤處理 檔案變成彙總

PHP作用域 遞迴 包含檔案 錯誤處理 檔案變成彙總

1.2 作用域
​ 1.2.1 變數作用域

​ 1、區域性變數:在函式外面

​ 2、全域性變數:在函式裡面,預設情況下,函式內部是不會去訪問函式外部的變數。

​ 3、超全域性變數:可以在函式的內部和外部訪問。

<?php
$_POST['num']=10;
function fun(){
    echo $_POST['num'];
}
fun();
?>
<?php
$num=10;
function fun(){
    echo $GLOBALS['num'];
}
fun();

global關鍵字

小結:

​ 1、$GLOBALS儲存的是全域性變數的所有的值

​ 2、global用於建立一個全域性變數的引用

注意:

​ 常量沒有作用域的概念

1.2.1 靜態變數(static)

​ 靜態變數一般指的是靜態區域性變數。

​ 靜態變數只初始化一次。

常量和靜態變數的區別

​ 1、常量和靜態變數都是初始化一次。

​ 2、常量不能改變值,靜態變數可以改變值

​ 3、常量沒有作用域,靜態變數有作用域。

1.2.3 匿名函式use()

<?php
$num=10;
$fun=function() use($num){	//將函式引入到匿名函式中
    echo $num;
}
fun();	//10

思考:如何在函式內部訪問函式外部變數

​ 1、使用超全域性變數

​ 2、$GLOBALS

​ 3、global

​ 4、use將函式外部變數引入到匿名函式內部

1.3 遞迴

函式內部自己呼叫自己

遞迴有兩個元素,一個是遞迴點(從什麼地方遞迴),第二遞迴出口

<?php
    function printer($num){
    echo $num.'&nbsp;';
    if($num==1)	//遞迴出口
        return;
    printer($num-1);	//遞迴點
    
}
printer(9);	//9 8 7 6 5 4 3 2 1

小結:儘量少用遞迴,因為遞迴需要用到現場保護,現場保護是需要消耗資源的。

1.4 包含檔案

​ 1.4.1 包含檔案的方式

​ 1、require:包含多次

​ 2、include:包含多次

​ 3、require_once:包含一次

​ 4、include_once:包含一次

<?php
    include './head.html';	//包含檔案
	include_once './head.html';

小結:

1、require遇到錯誤丟擲error類別的錯誤,停止執行

2、include遇到錯誤丟擲warning型別的錯誤,繼續執行

3、require_once、include_once只能包含一次

4、HTML型別的包含頁面中存在PHP程式碼,如果包含到PHP中是可以被執行的

5、包含檔案相當於把包含檔案中的程式碼拷貝到主檔案中執行,魔術常量除外,魔術常量獲取的是所在檔案的資訊。

6、包含在編譯時不執行、執行時載入到記憶體、獨立編譯包含檔案

1.4.2 包含檔案的路徑

1.5 錯誤處理

1.5.1 錯誤的處理級別

​ 1、notice:提示

​ 2、warning:警告

​ 3、error:致命錯誤

notice和warning報錯後繼續執行,error報錯後停止執行

1.5.2 錯誤的提示方法

​ 方法一:顯示在瀏覽器上

​ 方法二:記錄在日誌中

1.5.3 與錯誤處理有關的配置

在php.ini中

1.5.4 自定義錯誤處理(瞭解)

通過trigger_error產生一個使用者級別的error/warning/notice資訊

注意:使用者級別的錯誤的常量名中一定帶有USER。

定義錯誤處理函式

function error(){
    echo '這是自定義錯誤處理';
}
set_error_handle('error');	//註冊錯誤處理函式,只要有錯誤就會自動的呼叫錯誤處理函式
echo $num;

1.6 檔案變程式設計

​ 1、建立資料夾

​ mkdir:建立

<?php
    //1、建立目錄
    //mkdir('./aa/bb');
    mkdir('./aa/bb/cc/dd',0777,true);	//遞迴建立

​ 2、刪除資料夾

​ rmdir()

提醒:

刪除的資料夾必須是空的

PHP基於安全考慮,沒有提供遞迴刪除

​ 3、重新命名資料夾 rename()

rename('./aa','./aaa');	//將aa改為aaa

​ 4、是否是資料夾 is_dir()

echo is_dir('./aaa')?'是資料夾':'不是資料夾';

​ 5、開啟資料夾、讀取資料夾、關閉資料夾

$folder=opendir('./');	//開啟目錄
//var_dump($folder);	//resource(3) of type (stream)
while ($f=readdir($folder)){	//讀取檔案
	if($f=='.'|| $f='..')
        continue;
    echo iconv('gbk','utf-8',$f),'<br>';	//將gbk轉換為utf-8
}

for(::){
    if($f=readdir($folder)){
        if($f=='.' || $f=='..')
            continue;
        echo iconv('gbk','utf-8',$f),'<br>';	//將gbk轉換為utf-8
    }else{
        break;
    }
}
closedir($folder);	//關閉資料夾

小結:

1、opendir()返回資源型別

2、每個資料夾中都有.和..

3、iconv()用來做字元編碼轉換