static靜態變數
static靜態屬性和方法:
1、靜態方法在程式開始時載入到記憶體中,例項化方法使用是再載入
2、靜態方法不能呼叫非靜態方法
3、靜態方法無需例項化就可以直接呼叫,例項化方法需要先生成例項在通過例項呼叫方法,
雖然看來靜態方法比較快,但是他還是會佔用很多記憶體(即常駐記憶體)
4、靜態記憶體連續,因為在程式開始時就生成了,而例項申請的是離散的空間,所以速度較慢
5、靜態方法無論有多少個例項,記憶體中也只需要維護一份拷貝
6、靜態方法可以用來執行一個無狀態的完整操作,因為他不能呼叫其他的非靜態方法
7、靜態方法及例項化方法是為了解決模式的問題,為了讓開發更加模組化、面向物件化。
PHP物件的深拷貝和淺拷貝:
深拷貝:(值傳遞)賦值時完全複製,完全copy,改變其中一個不會影響另一個
淺拷貝:(引用傳遞)賦值時引用賦值,相當於取了個別名,對其中的一個修改,會影響到另一個
場景:物件的 = 賦值時(引用傳遞)實現一份副本,這樣存在很多問題,在不知不覺中我們可能會拷貝很多分副本
解決引用傳遞(實現值傳遞)的兩種方式:
1、重寫clone函式
public function __clone(){
$this->obj = clone $this->obj;
}
2、序列化反序列化實現物件深拷貝
$m = new TestOne();
m);
n);
3、運算子注意事項:除數不能為0;整數間運算大於最大值是將被轉換為float型;取模運算時餘數的正負取決於被除數的正負。
4、$GLOBALS 獲取函式中所有的變數
5、常量不可被修改,也不可被銷燬,判斷常量是否存在:用defined(‘PI’)
define(‘PI’, 3.14);
6、mysql常用函式
floor():向下取整
rand():取0-1之間的小數
left(email,5):從左邊開始擷取字串
position("@"):查詢字串@的位置,返回數字
now():返回當前時間戳
date_format(now(),’%Y/%m/%d’):格式化當前時間
distinct():去重
7、表的優化與列型別選擇
定長與變長分離:fixed表(定長)
常用欄位和不常用欄位分離
新增冗餘欄位
8、欄位型別優先順序 整形>date,time>enum,char>varchar>blob,text
9、雜湊的原理(myisam)(存取的時候,運用以下函式計算id與磁碟地址間的關係)
hash($id){
…//一系列複雜的運算
return address; //返回一個磁碟地址,告訴
}
缺點:無法為範圍查詢進行優化,無法保證唯一性,排序無法優化,必須回行
10、聯合索引:index(a,b,c) 注:和順序有關
按順序走a、b、c模板
= 嚴格走完模板
like 走完like之前的,之後的未走,所以like之後的索引不生效
btree的左字首原則:like ‘%hello’(此句不生效)
11、非聚簇索引:myisam,資料是一個檔案,索引是一個檔案(要回行操作:索引和值在不同的位置),myisam指向行所在的位置
聚簇索引:innoDB,資料及索引放在一起(不需要回行操作,資料藏在葉子節點的下面),innoDB次級索引指向對主鍵的引用
索引覆蓋:如果查詢的列恰好是索引的一部分,那麼查詢只需要在索引檔案上進行,不需要回行到磁碟再找資料,這種查詢速度非常快的操作稱為“索引覆蓋”
12、理想的索引:操作頻繁,區分度低、長度小、儘量能覆蓋常用查詢欄位
13、偽雜湊技巧:使用crc32()函式,把字串轉為32位有符號整數
14、修復表的索引碎片:optimize table;