18、陣列
$arr[null] = 20; //array([]=>20)
$arr[] = 20;//預設為下一個下標賦值
unset()可以刪除陣列元素,但不會重建索引
array_values()可以重建索引
19、list()
在list中宣告變數,可以將陣列中的值按順序賦給list中的變數
20、each()
用於處理陣列,可以返回陣列元素的鍵和值,鍵和值利用索引去獲取,0和key對應鍵,1和value對應值,而且重複呼叫,each()會自動處理下一個陣列
21、利用list()和each()聯合while迴圈
while(list($key, $value) = each($arr)){
echo $key." ".$value;
}
但是接下來再進行$arr同樣的while的迴圈時將不能夠處理,因為each()內部的指標已經移到末尾,需要用reset()重置陣列指標
22、控制陣列指標
next(),prev(),end(),reset()
key()獲取當前陣列的指標位置的鍵
current()獲取當前指標位置指向的值
23、預定義全域性變數(超全域性陣列)
$_SERVER 伺服器變數
$_ENV 環境變數
$_GET HTTP GET
$_POST HTTP POST
$_REQUEST GET POST COOKIE都可以接收
$_FILES HTTP檔案上傳變數
$_COOKIE HTTP cookie
$_SESSION
$GLOBALS 包含所有資訊
24、陣列鍵值函式
array_values($arr);獲取所有值
array_keys($arr[, $str]);獲取所有鍵或值對應的鍵
in_array($needle, $arr[,$bool]);是否存在[檢查二者型別],區分大小寫
array_flip($arr);返回陣列鍵值對換新陣列,注意值相同的鍵值對對換後發生覆蓋
array_reverse($arr);返回反轉陣列元素新陣列
array_count_values($arr);統計陣列中值出現個數,返回新陣列
array_unique($arr);去重值,只留下第一個,返回新陣列
25、陣列回撥處理
array_filter($arr[,$callback]);陣列過濾,預設去除空值,可自定義回撥函式,返回新陣列,利用回撥函式的返回值決定元素去留
array_walk($arr, $callback[,$data]);對陣列應用回撥函式,可選引數可以傳給回撥函式,直接對原陣列操作
例子:
$arr = array(1,2,-3,4,-5,6,-7,8,);
array_walk($arr, function(&$val){
$val = $val*2;
});
//或
array_walk($arr, function(&$val, &$key){
$val = $val*2;
$key =
});
//或
array_walk($arr, function(&$val, &$key, $reserve){
$val = $val*2;
$key =
}, $reserve);
array_map($callback, $arr1[,$arr2,...]);將回撥函式作用於多個陣列,並返回一個新陣列
例子:
$arr1 = array(1,2,3,4,5);
$arr2 = array("one", "two", "three", "four");
//分別將$arr1和$arr2的值按序傳到$v1,$v2,回撥函式的返回值將作為新陣列相應位置的一個新的元素,若兩個陣列長度不等,則缺值地方會以空值代替
array_map(function($v1, $v2){
return $v1+$v2;
}, $arr1, $arr2);
26、陣列判斷元素存在幾個函式區別
isset(),in_array();鍵對應的值為假值,會返回false
array_key_exist();鍵對應的值為假值,返回true
27、陣列排序函式
sort();陣列升序
rsort();陣列逆序
ksort();鍵名排序
krsort();鍵名倒序
asort();陣列排序,保持索引關係
arsort();陣列逆序,保持索引關係
natsort();對陣列自然排序
natcasesort();對陣列不區分大小寫自然排序
usort();應用回撥函式對陣列排序
uasort();同上,保持索引關係
uksort();對鍵進行回撥函式排序
array_multisort();對多個陣列排序,第一個陣列排序後,隨後陣列元素按照與排序前第一個陣列元素相對應位置進行排序,前提兩個陣列的長度相等
28、陣列拆分、合併
array_slice($arr, $offset[,$length[,$bool]]);擷取,預設重置陣列的鍵,$bool決定是否關聯索引
array_splice(&$arr, $offset[,$length[,$replace]]);去掉元素,或用$replace替換若使用$replace,則必須指定$length
array_combine($arr1, $arr2);將兩個陣列合並,陣列1值為鍵,陣列2值為值,前提兩個陣列長度相等,陣列1的值有相同的,則會發生覆蓋
array_merge($arr1, ...);合併多個陣列
array_intersect($arr1, ...);計算多個陣列交集
array_diff($arr1, ....);計算多個陣列差集
29、陣列與資料結構
array_push();從尾入
array_pop();從尾出
array_unshift();從頭入
array_shift();從頭出
30、陣列其他操作
array_rand($arr[,$num]);隨機從陣列中取出一個或多個下標
shuffle($arr);將陣列元素順序打亂
array_sum(&$arr);計算陣列元素值得和
range($low, $high[,$step]);返回min($low,$high)->max($low,$high)的元素陣列,可設定步長,$high可以任意大
array_fill($start, $length, $value);利用$value填充從$start開始的$length個元素
31、關鍵字
var
public
protected
private 私有,只能在類內呼叫
static 可以修飾方法和屬性,不能修飾類,類的物件共用,靜態成員需要用類名呼叫(::),靜態方法不能訪問非靜態成員
instanceof用於檢測某物件是否屬於指定類
final修飾的類不能被繼承,修飾的方法不能被重寫
const只能修飾屬性,被修飾的為常量,呼叫與靜態變數相同
32、例項化物件
$var = new Lei;
$var = new Lei();
33、物件引用屬性和方法的方式
$this指向類的當前例項
self指向類自身,一般用於處理類的靜態成員
parent,指向父類,一般用於子類呼叫父類的方法
34、構造與析構方法
物件建立第一個自動呼叫,可有引數
function __construct(){}
物件釋放最後一個自動呼叫,沒有引數
function __destrcut(){}
35、魔術方法
__get($var);獲取私有屬性值
__set();為私有屬性賦值
__isset();類內設定,則允許類外部利用isset()來判斷私有屬性
__unset();類內設定,則允許類外部利用unset()來刪除私有屬性
__toString();在輸出物件時可以返回描述資訊
__clone();類似構造方法可以對克隆的副本做初始化
__call($method, $args);
呼叫物件中不存在的方法時,自動呼叫的方法
有兩個引數,第一個:呼叫不存在的方法的方法名,第二個:呼叫這個不存在的方法的方法引數
例子:
class people{
private $name = "fan";
private $age = 22;
function __get($var){
return $this->$var;
}
function __set($var, $val){
$this->$var = $val;
}
function __isset($var){
return isset($this->$var);
}
function __unset($var){
unset($this->$var);
}
function __toString(){
return "describe";
}
function __clone(){
}
}
$p = new people;
if(isset($p->name))
echo true;
echo $p->name;
$p->age = 22;
unset($p->age);
36、單例設計模式
(1) 私有化構造方法,類外部無法建立物件
(2) 定義靜態變數用於儲存此類物件
(3) 定義靜態方法連返回物件
class Single{
static obj = null;
private __construct(){}
static function getSingle(){
if(!self::obj)
self::obj = new self;
return self::obj;
}
}
37、物件序列化
物件序列化又稱為物件序列化,也就是將物件格式化為字串,可以實現物件的永久儲存,利用函式serialize()實現,從字串可以利用unserialize()實現反序列化
魔術方法__sleep(),只要在這個方法中返回一個陣列,只要那個陣列中有屬性的名稱,則那個屬性就會被序列化,注意是屬性。
魔術方法__wakeup(),物件反序列化時物件初始化作用,類似__clone,__construct