面試的時候發現自己有時候連最基礎的知識都不能準確的回答,甚是可悲,萬丈高樓平地起!
1-語法規範
- 行位單位、所以每行要用分號結束
- 變數嚴格區分大小寫,函式名、方法名、類名不區分大小寫
2-標籤4種
- xml風格
<?php ?>
- script風格
<script language="php"> echo "script"; </script>
- 短格式
<? echo 'php'; ?>
- sap格式 <% echo "php"; %>
3-註釋
-
雙引號
-
單引號
注意:雙引號不能與單引號錯位
4-變數
1-變數的定義
變數就是記憶體中用於臨時儲存資料的一個記憶體空間,每一個空間都有一個名子,這個名子就是變數名,變數名的作用是用於引用,通過變數名對變更的操作就是對記憶體的對應的空間都讀寫。
語法:$變數名=值
;
- 變數名必須是字元數字下劃線開頭
- 必須以 $ 開頭
- 變數名嚴格區分大小寫
2.-可變變數
A變數值是另一個變數的名,就可以在A變數名前加兩個$讀取另一個變數的值。
$a = 'b';
$b = 'c';
$$a = 'c';
3-預定義變數 (9種、$_
、$GLOBALS
)
- $_GET 用於接收從前臺以get方式傳遞過來的資料
- $_POST 用於接收從前臺以post方式傳遞過來的資料
- $_REQUEST 包含get與post方式傳遞的資料
- $_SERVER 記錄了客戶端與伺服器端的相關資訊
- $_COOKIE 主要用於記錄php會話技術中的儲存在客戶端的資料
- $_SESSION 主要用於記錄php會話技術中的儲存在伺服器端的資料7.
- $GLOBALS 主要用於記錄全域性變數
- $_FILES 主要儲存使用者上傳的檔案的資訊
- $_ENV 主要用於儲存php的環境變數
6-變數的刪除
- unset(變數名);記憶體中沒有
- 變數名 = null;(變數的值是null,還存在於變數中)
7-常量
常量就是一類特殊的變數,常量也是儲存資料的,但是常量一旦定義就不允許更改值,常量本身也不能刪除。
-
常量的定義
- define('常量名',值);
- const 常量名 = 值;
-
區別:
- const可以定義類的內部和外部
- define只能定義類的內部
- define的第三個引數區別大小寫 true
const的值讀取:constant()
8-魔術常量(6種、__開頭)
__FILE__ 當前指令碼檔案的完整路徑名
__LINE__ 當前行號
__DIR__ 當前檔案的所在的目錄
__FUNCTION__ 獲取當前所在的函式名
__METHOD__ 獲取當前所在的方法名。形式 類名::方法名
__CLASS___ 獲取當前所在的類名
9-資料型別
==三大型別:(4+2+2)==
- 標量資料型別(int、float、string、bool)
- 複合資料型別 (array、object)
- 特殊資料型別(resource、null)
一. 標量資料型別
-
int
-
float
-
string
-
使用單引號定義的字串能被轉義的字元有\’轉義成` \\轉義成\
-
單引號中的變數不能被解釋為變數的值
-
使用雙引號定義的字串能被轉義的字元有\” \ \$ \t \n
-
雙引號中的變數能被解釋為變數的值
-
雙引號中的變數有時需使用”{}”括起來,來限定變數
- php中的轉義符()
\' 單引號 \" 雙引號 \t tab表(製表符) \n 換行 \r 回車 \\ \ \$ $
-
定界符 heredoc 、nowdoc
<?php //heredoc $a = 100; $str =<<<abc sadsad,$a,sad abc; echo $str; //nowdoc $a =100; $str = <<<'AAA' 這裡可以是任合內容 我是歷的苛奪基$a 本原則葉落歸根在運 輸費艱難田¥¥&…… AAA; echo $str;
-
- Boolean
10-複合資料型別
- 陣列
- ==索引陣列== 下標是整數
- ==關聯陣列== 下標是字元
- object
物件
11-特殊資料型別
- resource
- null
12-資料型別的轉換
-
其他資料型別轉為整型
- 其他資料型別轉為字串
- 其他資料型別轉為布林型
- 所有0、“”、“0”、null、array()轉布林都為false
13-變數與常量的記憶體理解
1、記憶體分割槽
- 棧區 cpu
- 堆區 儲存複合型別的值
- 資料段 簡單的值,細分全域性區(全域性變數、區域性變數)和靜態區(常量、類常量、靜態變數)
- 程式碼區 (存程式碼)
14-執行過程
- 編譯
- 執行
- 輸出
15-函式判斷
is_int() 判斷是否為整型
is_bool() 判斷是否為布林型別
is_array() 判斷是否為陣列
is_null(); 判斷是否為null
is_object() 判斷是否為物件
is_string() 判斷是否為字串
is_scalar(); 判斷是否為標量資料型別
- empty();
- 判斷一個變數是否為“空”,只要是能夠轉換為布林false都是所謂的“空”,返回布林true。0、0.0、””、’0’、false、null、空陣列
- isset();
- null的時候是false
- 主要用於判斷是否設定值,如果是null值才返回false
- is_null();
- 只有是null才為true
- 主要用於判斷一個變數的值是否為null
16-PHP的輸出語句
echo
print_r()
var_dump()
sprint_f()
十四、運算子
值得注意的是,很多人搞不清楚前自增和後自增的區別,
前自增
執行規則:先對變數的值進行加1,再使用變數的值進行運算
後自增
執行規則:先使用變數的值進行運算,再對變數的值進行加1
提示:
無論前自增還是後自增,變數的值都會加1,唯獨受影響的是整個式的結果
- 算術運算子
- 前自增
- 後自增
- 前自減
- 後自減
- 字串運算子
- .
- .=
- 比較運算子
>、<、>=、<=、!=、==、===、!==
- 提示:
- 布林false
- 等效false的值(0、0.0、””、’0’、null、空陣列)
- 如果要嚴格區分等效於false的其他資料型別值與真的布林值false,那麼請求===
- 邏輯運算子
- &&、||、!、and、or
- 邏輯與短路:有一個為true返回true
- 邏輯或短路:有一個為false返回false
and、or 與 &&、||區別:
and、or的運算優先順序低於=
&&、||的運算優先順序高於=
- 位運算子
十五、流程控制
一、 分支結構
//單分支
if(exp){
//your code
}
//雙分支
if(exp){
//your code
}else{
//default code
}
//多分支
if(expA){
//codeA
}else if(expB){
//codeB
}else if(expC){
//codeC
}else{
//default code
}
switch分支
語法:
switch(變數){
case 值1:
//語句體1
break;
case 值2:
//語句體2
break;
default:
//預設語句體
}
php中switch的比較屬於==比較,js中switch的比較屬於===
二、 迴圈控制
- for迴圈
for($i=0;$i<10;$i++){
}
- foreach迴圈
語法1:
foreach(陣列 as $v){
//迴圈體
}
語法2:
foreach(陣列 as $k=>$v){
//迴圈體
}
- while迴圈
while(exp){
//迴圈體
}
- do…while迴圈
do{
//迴圈體
}while(exp)
一、陣列 count($arr)
- 元素
- 下標
- 個數
二、陣列的相關操作
- 定義:array()、[]
- 追加
- 刪除 usnet();
三、陣列的遍歷
- 下標連續的
for($i = 0 ;$i<count($arr);$i++){
}
- 下標不連續
foreach(陣列 as $k => $v){
//迴圈體
}
三、陣列的分類
- 索引陣列-下標是整數
- 關聯陣列-下標是字串
- 混合陣列
四、關聯陣列的遍歷
==怎麼把關聯二維陣列轉換成一維陣列==
public function test1(){
$user = array(
'id'=>1,
'name'=>'zhangsan',
'age'=>19
);
$arr = '';
foreach ($user as $key=>$value ){
$arr .= $value;
}
dump($arr);die;
}
public function test2(){
$arr = [];
$arr[] = 'zhsangsan';
$arr[] = '19';
$arr[] = '1';
dump($arr);die;
}
五、函式
- 函式的定義
function funName(形參列表){
//函式體
【return 值】;
}
- 形參
- 形參主要用於接收從函式外部傳遞進來的資料
- 形參只對內部可見
- 形參可以具有預設值,如果在呼叫時沒有為具有預設值的形參傳遞資料,那麼在函式內部使用的形參的預設值,否則使用傳遞進來的資料。
- 具有預設值的形參一般位於形參列表的最後。
- 形參的作用是讓函式更性有通用性
- 實參
- 用於向函式內部傳遞值
- 匿名函式
$showInfo =function(){
}
六、靜態變數
- ==在函式內部使用static定義的變數就是靜態變數==
- 靜態變數的特性
- 靜態變數只會被初始化一次
- 靜態變數的值不會隨著函式的呼叫而銷燬,仍然在記憶體,但是不能在函式外部訪問。
- 靜態變數在其後函式呼叫時還可以訪問,並且保留上一次函式執行時的結果
- ==專案中積分的使用問題==
七、傳值方式
- 賦值傳真
- 將變數A的值傳遞到變數B
- 引用傳值
- 將變數A的記憶體地址傳遞到變數B
- &地址符
- 用於將賦值傳值更改為引用傳值。
- 函式的實參地址的傳遞
- 函式的實參與形參的傳值是賦值傳值
- 如果想實現函式實參與形參的引用傳值,形參前面加&
八、作用域
-
外部作用域
在任何函式外部定義的變數就是全域性變數,其作用域就是全域性作用域
-
內部作用域
在函式內部定義的變數就是區域性變數,其作用域就是區域性作用域
-
全域性作用域
global關鍵字
函式內部訪問函式外部的變數 -
不受作用域限制
- 常量、
- 預定義的變數:
- $_GET
- $_POST
- $_REQUEST
- $_SERVER
- $_SESSION
- $_COOKIE
- $_ENV
- $_FILES
- $GLOBALS
一、PHP檔案引入
- require
- 在引入的檔案發生錯誤(不存在),會直接結束當前迴圈的執行。
- inlcude
- 在引入的檔案發生錯誤(不存在),會繼續其後的程式碼執行。
- require_once\include_once
- 在引入檔案時會先檢查被引入的檔案之前是否有引入過,如果沒有則引入,有就不引入
說明:一般引入的程式碼有邏輯性的,使用require,include一般用來引入HTML
二、針對呼叫的函式引入問題
- 同一個指令碼內可以先呼叫函式後定義函式
- 原理:先編譯,編譯後程式碼區就有了函式的定義程式碼,後再呼叫,正常
- 先呼叫,後引入,報錯(原因是引入的檔案是先引入後呼叫,執行呼叫時檔案還沒有定義,所以會報錯)
三、PHP常用字串
-
==strlen== 字串的長度
$string = 'http://www.doc.com/index.php/Home/Test/strlen'; echo (strlen($string));
-
==strchr== 查詢search字串首次出現的位置並擷取到最後
strchr($string,'w')
-
==strrchr== 查詢search字串末次出現的位置並擷取到最後
strchr($string,'i')
-
==strpos== 在str字串中查詢search字串首次出現的位置(0開始算起)
echo (strpos($string,'w'));
-
==strrpos== 在str字串中查詢search字串最後一次出現的位置
echo (strpos($string,'w'));
- stripos、strripos i表示不區分大小寫的查詢
-
==trim==
①:trim(str【,substr】) 用於在str字串兩端去除指定的substr字元,如果省略substr,則是去除空格$string = " zhangsan "; echo(trim($string)); $string1 = '22zhangsan22'; echo '<br/>'; echo (trim($string1,'22'));
②:ltrim(str【,substr】) 去除左側指定的字元或空格
$string2 = '22zhangsan'; echo (ltrim($string2,22));
③:rtrim(str【,substr】) 去除右側指定的字元或空格
$string2 = 'zhangsan22'; echo (rtrim($string2,22));
-
==str_repeat(str,n)==
$string2 = 'nice'; echo (str_repeat($string2,3));
-
==ucfirst、ucwords== 首寫單詞大寫,一句話首單詞大寫
$string2 = 'nice'; echo (ucfirst($string2)); $string2 = 'nice aweqwe dqwe'; echo (ucwords($string2));
-
==strtolower、strtoupper== 轉換大小寫
-
==explode(sep,str)== 將字串str,使用sep分隔符進行分割,並以陣列的形式返回
$str = "people became quite illogical when they decide"; var_dump(explode(' ',$str));
-
==md5( )== 加密,返回32位字串
- ==addslashes()==
對於些特殊字元新增反斜槓(\),特殊字元(‘)(“)(\)
- ==stripslashes( )==
- addslashes的逆運算,去除反斜槓
- ==htmlspecialchars== 將html語言中的標籤轉換成對應的字元實體。
- ==htmlspecialchars_decode== 逆運算
- ==chr、ord==
- ord主要用於獲取字元的unicode編碼 97
- chr主要用於獲取指定編碼對應的字元 b
四、數學函式
- max() 獲取多個變數或陣列中的最大值
- min() 獲取多個變數或陣列中的最小值
- abs() 獲取絕對值
- ceil() 向上取整
- floor() 向下取整
- rand(m,n) 獲取m與n之間的隨機整數
- mt_rand(m,n); 推薦,獲取m與n之間的隨機整數
- round(v【,p】); 對變數v保留p位小數(四捨五入),如果省略p表示直接取整
- pow(m,n); 取m的n次方
- sqrt(v); 開平方
五、陣列函式
-
count() 陣列長度
-
array_keys($arr); 以陣列形式返回key值
-
array_values($arr); 以陣列形式返回value值
-
in_array($value); 判斷陣列$arr中存是否有$value值存在
-
array_key_exists($key,$arr); 判斷陣列$arr中存是否有$key鍵名存在
-
陣列新增與刪除
- array_pop(); 從尾部刪除一個元素
- array_push(); 向陣列的尾部追加一個元素
- array_shift(); 從頭部刪除一個元素
- array_unshift(); 向陣列的部部追加一個元素
- array_splice(); 從陣列的中間刪除指定個數的元素,並以新的元素代替
-
list結構
list(變數列表)= 陣列
將陣列中的元素的值,依次賦值給list後的變數,要求陣列是一個索引陣列
-
陣列排序
- sort(arr); 對陣列進行升序排序
- rsort($arr); 對陣列進行降序排序
-
陣列合並
- array_merge(arrA, arrA, arrA,….);
- 陣列指標相關的函式
-
each(); 用於獲取當前陣列指標所指向的元素,並返回一個混合陣列,==並將指標下移==。
-
key(); 用於獲取當前陣列指標所指向元素鍵名
-
current(); 用於獲取當前陣列指標所指向元素的鍵值
-
next(); 將指標下移
- prev(); 將指標上移
- end(); 將指標指向最後一個元素
- reset(); 重置指標(回到第一個元素)
<?php
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
//用於獲取當前陣列指標所指向的元素,並返回一個混合陣列,並將指標下移。
var_dump(each($arr));
var_dump(key($arr)) ;
var_dump(current($arr)) ;
var_dump(next($arr)) ;
var_dump(prev($arr)) ;
var_dump(end($arr)) ;
var_dump(reset($arr)) ;
輸出結果
array(4) {
[1]=>
int(2)
["value"]=>
int(2)
[0]=>
string(2) "id"
["key"]=>
string(2) "id"
}
string(5) "brand"
string(5) "apple"
int(16)
string(5) "apple"
int(16)
int(2)
示例2:使用each遍歷陣列
<?php
$arr =[
'id'=>2,
'brand' => 'apple',
'price'=> 16
];
while($data = each($arr)){
echo $data['value'],'<br/>';
}