靜態變數
static,是在函式內部定義的變數,使用static關鍵字修飾,用來實現跨路徑函式共享資料的變數;
static $變數名=值 //通常會在定義的時候就直接賦值
靜態變數都是區域性變數
為了跨函式共享資料,不是不同函式,而是同乙個函式被多次呼叫,在多次呼叫時,不會重複定義,而只是會被第一次初始化;
<?php
functiona(
)a()
;echo
"------\r";a
();echo
"------\r";a
();?>
結果:
11--
----12
------1
3
發現static定義的變數,每一次都根據上一次的進行了改變
在函式結束後不會被釋放
1、為了統計
2、為了統籌函式多次呼叫得到的不同結果(遞迴思想)
可變函式
當前有乙個變數所儲存的值,剛好是乙個函式的名字,那麼可以使用變數+()來充當函式名使用
<?php
function
display2()
$func
="display"
;$func()
;?>
結果:
display2
可變函式在系統使用的過程中還是比較多的,尤其是使用多系統函式的時候,需要使用者在外部定義乙個自定義函式,但是需要傳入到系統函式內部使用。
匿名函式
<?php$a=
function()
;$a()
;var_dump($a
);?>
結果:
hello world!
object
(closure)
#1 (0)
closure就是閉包
閉包函式內部有一些區域性變數(要執行的**碼)在函式執行之後沒有被釋放
<?php
function
display()
;//函式呼叫
$innerfunction()
;}display()
;?>
結果:
display
偽型別
實際上在php中不存在的型別,但是通過偽型別可以幫助程式設計師更好的檢視操作手冊而更方便學習
mixed:多型別,只要是php中的型別即可
number:
常用的系統函式:
有關資料的函式:
rand():得到乙個隨機數,指定區間的隨機整數
<?php
echo
rand(1
,10),
"\r"
;echo
mt_rand(1
,10),
"\r"
;//效率比rand高,一般用隨機會用mt_rand
?>
pow()求指定數字的指定次數結果:
<?php
echo
pow(2,
10),"\r"
;echo2^
10,"\r"
;//這裡就不是2的10次方了
echo2*
*10,"\r"
;?>
1024
81024
有關函式的函式:
function_exists():判斷指定的函式名字是否在記憶體中存在(幫助使用者不去使用乙個不存在的函式,讓**安全性更高)
func_get_arg():在自定義函式中去獲取指定數值對應的引數
func_get_args():在自定義函式中獲取所有的引數(陣列)
func_num_args():在自定義函式中獲取引數的數量
以上都是統計的實參的數量
<?php
function
test($a
,$b);
test(1
,2);
?>
int(2
)array(2
)int(2
)
錯誤處理:
語法錯誤:parseerror
執行時錯誤:runtime error
邏輯錯誤:
錯誤代號:
所有看到的**在php中都被定義為了系統常量(可以直接使用)
系統錯誤:
e_parse:編譯錯誤,**不會執行
e_error:fetal error,致使錯誤,會導致**不能正確繼續執行(出錯的位置斷掉)
e_waring:警告錯誤,不會影響**執行,但是可能得到意想不到的結果
e_notice:notice,通知錯誤,不會影響
使用者錯誤:
e_user_error:
e_user_warning:
e_user_notice:
使用者在使用自定義錯誤觸發的時候,會使用的錯誤代號(系統不會用到)
其它:e_all
代表著所有錯誤,建議在開發過程中(開發環境)使用
<?php$a=
100;$b=
0;if(
$b==0)
echo
"hello"
;?>
notice: 除數不能為0 in /usercode/file.php on line 5
fatal error: 除數不能為0 in /usercode/file.php on line 7
可以通過trigger_error的第二個引數進行嚴格限制
錯誤顯示設定:
方法一:
php.ini php的配置檔案:全域性配置
display_errors:是否顯示錯誤
error_reporting:顯示什麼級別的錯誤
方法二:
可以在執行php的指令碼中設定,在指令碼中顯示定義的配置項級別比配置檔案高(通常會用指令碼配置)
error_reporting():設定對應的錯誤顯示級別
ini_set(「配置檔案中的配置項,配置值」)
ini_set(「error_reporting」,e_all);
ini_set(「display_errors」,1);
錯誤日誌設定
不直接讓錯誤赤裸裸的展示給使用者
不友好不安全,錯誤會暴露**更多資訊(路徑,檔名)
這樣需要儲存到日誌檔案中 .log檔案
自定義錯誤處理函式
<?php
function
my_error
($errno
,$errstr
,$errfile
,$errline
)switch
($errno);
};
一般情況下:
echo
100/
0;
報錯:
warning: division by zero in /usercode/file.php on line 28
inf
自定義後:
set_error_handler
('my_error');
echo
100/
0;
warning in file /usercode/file.php on line 27
>error info :division by zeroinf
字串
單引號『』和雙引號「」,一般用於比較短或者沒有結構要求的字串,如果有結構要求,或者內容超過一行,可以使用以下兩種結構定義:
nowdoc:沒有單引號的單引號字串
heredoc:沒有雙引號的雙引號字串
$str=<<<『邊界符』
字串內容
邊界符
<?php
//heredoc:沒有雙引號的雙引號字串
$str
=<
eod;
//nowdoc:沒有單引號的單引號字串
$str2
=<<<'eod'
hello
eod;
var_dump
($str
,$str2);
?>
string(9
)" hello"
string(9
)" hello"
字串轉義
在計算機通用協議中,有一些特定方式定義的字母,系統會特定處理,通常這種方式都是使用反斜槓+字母(單詞)的特性:
\r\n換行
\r代表回車(理論上是回到當前行的首位置)
\n代表新的一行
\t類似tab鍵,輸出4個空格鍵
$在php中使用$作為變數符號,因此需要特定識別
換行只以在雙引號下有效"\r\n"
小白學習,c 基礎(四)
巨集函式 帶引數 的缺點 第乙個在c中也會出現,巨集看起來像乙個函式呼叫,但是會有隱藏一些難以發現的錯誤。第二個問題是c 特有的,預處理器不允許訪問類的成員,也就是說預處理器巨集不能用作類的成員函式 內聯函式 內聯函式為了繼承巨集函式的效率,沒有函式呼叫時開銷,然後又可以像普通函式那樣,可以進行引數...
小白學習,c 基礎(五)
1 類的空間大小 using namespace std class data intgetnum void void test01 2 成員函式,在類內宣告,類外定義 include using namespace std class data data類的成員函式 void data setnu...
小白學習,c 基礎(七)
1.1修飾成員函式 用const修飾的成員函式時,const修飾this指標指向的記憶體區域,成員函式體內不可以修改本類中的任何普通成員變數,當成員變數型別符前用mutable修飾時例外。int myfun void const const修飾的是成員函式 函式內部不能修改普通成員變數 mutabl...