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.' ';
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()用來做字元編碼轉換