## 一、PHP基本語法
1. html和php混編
2. 語句以 ; 結尾(一個頁面少一個分號,整個頁面不運行)
3. 定義變量
4. 變量數據類型不是固定的,根據賦值類型而變化
5. php是弱數據類型
## 二、8種數據類型
1. 基本類型:整型,浮點型,布爾型,字符串型
2. 復合類型:數組,對象
3. 特殊類型:null,資源
### 整型
1. 整數值可以用十進制,十六進制(0x開頭),八進制(0開頭)表示
~~~
//進制轉換
a=10,b=11,c=12,d=13,e=14,f=15
0x1a=10+1*16
0123=3+2*8+1*8*8
~~~
2. php的整數都是有符號的
3. 整型長度和平臺有關,通常4字節(PHP_INT_SIZE),最大值(PHP_INT_MAX)
1個字節8位,4個字節32位,有一位是符號位,所以最大值是2的31次方-1
4. 超出整型的數,自動變為浮點型
### 布爾值
1. true,false不區分大小寫
2. 非0,非空字符串都是true
3. 以下為false
4. 布爾值false自身
* 整型0
* 浮點型0.0
* 空字符串,以及字符串“0”
* 不包括任何元素的數組
* 不包括任何成員變量的對象
* 特殊類型null
* 從空標記生成的simplexml對象
### 浮點型
1. 浮點型也叫雙精度
2. 浮點數字長和平臺有關,一般是1.8e308,14位十進制精度
3. 小數的精度從第一個非0開始,到最后一個數會四舍五入
1. 浮點數運算中進行比較:
* 使用round將其轉換為整數,再比較
~~~
if(round($f*10000)==round(2.8*10000))
~~~
* 使用絕對值的相差值,和一個極小的值比較
~~~
if(abs($f-2.8)<0.00000000001)
~~~
*如果2個浮點數是直接賦值的數,可以直接比較
### 字符串類型
1. PHP字符串最大2GB
2. 字符串常見定義方法:
* 單引號
1)單引號不會解析$
2)效率比較高
* 雙引號
1)會解析$
2)執行效率沒有' '高
3)在" "解析含有特殊字符或數組,要用{}括起來
~~~
$book="書名是:{$arr['name']}"
~~~
* heredoc語法結構(類似雙引號)
1)會解析$
2)后面的定界值HTMLCON可以任意,一般大寫
3)HTMLCON后面不能有空格等任何內容
4)最后的HTMLCON; 要頂格寫,這一行前面不能有任何內容
~~~
//一般用戶返回大段的html代碼
$div==<<<HTMLCON
<h1>hello,................</h1>$num
HTMLCON;
~~~
* nowdeo語法結構(類似單引號)
1)不解析$
~~~
$div=<<<'HTMLCON'
..................
HTMLCON
~~~
1. 如果是雙引號,會解析轉義符
~~~
\n \r \t \f \\ \$ \" \e \v
//十六進制的值對應的ascii字符 ,8進制對應的ascii字符 如:
\x40 //16進制 @
\132 //十進制 Z
\101 //8進制 A
~~~
### 編碼
* ascii碼:最早126個,表示圖形a-z,@等各種符號
* 后來更多字符,沒法表示,就產生gbk,gb2312,utf8,unicode等
1. PHP執行雙引號,如果發現有$變量
1. 先會找到$變量的值
2. 如果值的后面有(),嘗試去執行這個函數
3. 如果沒有函數,會報錯
~~~
echo "{$abc()}";
~~~
**原則:**
* 考慮效率,用單引號
* 如果返回的是大段html代碼,用heredoc,nowdoc
* 如果拼接sql語句,里面有大量變量,用雙引號
* * * * *
### 數據類型轉換
* 自動轉換
* 強制轉換
#### 自動轉換
進行運算的時候,數據自動向高進度轉換
**布爾值>int>float**
int+boolen=int
boolen+float=float
#### 強制轉換
1. setType(變量名,類型); 任意類型(string,null,obejct,array,number,boolean,float)
2. (類型)變量
3. intval(變量),floatval(變量),strval(變量),booleanval(變量),doubleval(變量);
~~~
$a=10;
setType($a,"array");
var_dump($a);
~~~
~~~
$a=10;
$b=(string)$a; //$a的類型不變
var_dump($b);
~~~
~~~
$a=10;
$b=floatval($a); //不改變變量本身的類型
var_dump($b);
~~~
**3種轉換類型的選擇**
* 是否要改變本身的類型setType
* val方式沒有數組等方法,沒有復雜類型轉換
### 變量相關函數
* isset();是否設置,并且不是null
* unset();銷毀變量
* empty(); 變量是否為空,可以判斷0,空的""
* gettype();返回某個變量對應的數據類型
* is_int(),is_array(),is_bool,is_null,is_long,is_object,is_string

* * * * *
**empty和isset區別:**
如果不能接受0,就用empty
isset配合&&數據合法性
只要是表單,提交后都是string,使用strpos,查找字符串首次出現的位置
is_numeric判斷是否數字或是數字字符串
~~~
//isset
$a=10;
if(isset($a)){
echo '$a存在,并且不為null';
}else{
echo "不存在";
}
~~~
~~~
//unset
$a=10;
unset($a);
if(isset($a)){
echo '$a存在,并且不為null';
}
~~~
~~~
//gettype
$a=444.333;
echo gettype($a);
~~~
* * * * *
**細節:**
unset()
unset銷毀指定變量
如果在函數中使用unset,銷毀的只是局部變量
~~~
$a=111;
function box(){
global $a;
unset($a);
$a=333;
//unset($a);
}
box();
echo $a; //333
~~~
### 全局變量GLOBALS
~~~
$book='西游記';
var_dump($GLOBALS);
~~~
在函數中銷毀全局變量$GLOBALS,直接干掉存儲變量的空間
~~~
$book='西游記';
function box(){
unset($GLOBALS['book']);
}
box();
echo $book;
~~~
**empty**
1.非空,或非0返回false
2.否則返回true 0,"0",false,null,array(),以及沒有任何屬性的對象
### 引用傳遞和值傳遞
PHP默認都是值傳遞,但也可以指定引用傳遞&
引用傳遞,指向的是同一個內存地址
對象,數組也是按值傳遞
~~~
$a=10;
$b=&$a;
$b=20;
echo $a;
~~~

### 變量定義規范
一般是字母,下劃線開頭
不能以數字開頭
變量區分大小寫,函數不區分大小寫
**命名方式:**
* 駝峰法
* 下劃線法
* 每個單詞大寫