php基礎知識(一)

閉包的理解

內外兩個函數

外部函數執行完畢後

由於內部函數被外部函數引用着

導致其內部的變量繼續存活,而不是函數執行完畢後,立刻銷燬

閉包的代碼實現

function A(){

  var count = 0;

  function B(){

    count ++;

    console.log(count);

  }

  return B;

}

var C = A();

C();// 1

C();// 2

C();// 3

PHP內存回收機制

垃圾回收機制

引用計數器的理解

爲內存對象綁定計數器

當內存對象被引用時 +1操作

當內存對象被撤銷時 -1操作

當計數器等於0時 表明該內存對象沒有被引用 會進行垃圾回收

 

(回收,需要斷定變量有沒被使用)

引用計數器使用過程中存在的問題

 

當兩個或兩個以上的對象互相引用形成環狀的時候,內存對象不會被銷燬。

 

但是,php5.3以後提供了同步週期算法來檢測環狀的存在,避免了這個問題

PHP內存溢出的解決方法

1)變量

 變量用完後,及時銷燬

 儘量少用靜態變量

 

2)對象

   對象用完後及時析構

 數據庫用完後及時關閉

 

3)數組

 數組分批處理

 

4)內存

 增加內存

Unset無法銷燬變量釋放內存的問題

1)變量佔用內存空間未到256字節

 

2)還有別的變量引用

單例模式原理

一個類中只有一個實例,並且可以自行實例化,向整個系統提供這個實例

 

可以節省資源

避免重複實例化

單例模式實現的代碼

(重點記憶)

Class singleton{

  Private Static  $obj = null;

  Private function __constract(){}

  Private function __clone(){}

  Public static function getInstance(){

        If( !is_object(self::$obj)){

               Self::$obj = new self;

         }

         Return self::$obj;

   }

}

工廠模式

1)簡單工廠

2)工廠方法

3)抽象工廠

 

簡單工廠:只有一個工廠

工廠方法:每一個產品有對應的工廠

抽象工廠:多個產品的等級結構

觀察者模式

    當一個對象的狀態發生改變時,其他的對象會全部收到通知,並且會自動跟新

    觀察者模式實現了低耦合,非侵入性的通知跟新機制

 

註冊 下訂單

警察來了,就通知各個走鬼趕緊逃

其中警察就是被觀察者,走鬼是觀察者

   

http://10.0.0.7:3030/contract/CreateTravelTest/server

當前腳本的名稱(不包括路徑和問號後面的內容)

$_SERVER[script_name]   

 

/index.php
 

$_server['script_filename']   

 

E:\WebSite\i.zglylx.com\index.php

當前頁面的前一個頁面的URL地址

$_SERVER[http_referer]

當前腳本的絕對路徑

$_SERVER[http_host] . $_SERVER[request_uri]

客戶端的IP地址

$_SERVER[remote_addr]

查詢的字符串(包括了問號後面的內容)

$_SERVER[query_string]

當前運行的腳本所在的文檔根目錄

$_SERVER[document_root]

 

E:\WebSite\i.zglylx.com

%取模運算

$a % $b   $a爲負值時,結果也是負值

Arsort

Array_reverse_sort

對數組進行逆向排序並保持索引關係

去掉<script></script>標籤

/<script .*?>.*?</script>/si

Apache添加php模塊

LoadModule  php5_module

c://php/php5apache2.dll

讓服務器識別PHP文件

AddType application/x-httpd-php.php

是否開啓函數在調用時強制參數按照引用傳遞

Allow_call_time_pass_reference

Php5和php7的區別

1)同一命名空間下的類,可以單use語句一次導入

2)魔術方法 __callstatic() __invoke()

3)trait靈活的代碼重用機制

4)匿名類 new class實例化匿名類 可用來替代用後即焚的類

5)快捷的三元運算符

6)太空船運算符

太空船運算符

$c = $a <=> $b;

1)$a > $b , $c = 1;

2)$a = $b , $c = 0;

3)$a < $b , $c = -1;

Trait的代碼,實現代碼的重用

Trait HelloWorld{

  Public function sayHello(){

  Echo hello world;

}

}

 

Class theWorldIsNotEnough{

  Use HelloWorld;

  Public function sayHello(){

       Echo hello universe!;

   }

}

 

$o = new theWorldIsNotEnough( );

$o->sayHello( );  // hello universe!

 

如果去掉裏面的sayHello方法,結果是:

Hello world;

優先順序是當前類中的方法會覆蓋trait方法。

__invoke()

當系統找不到方法時,就會自動調用這個方法

爲什麼php7比php5性能提升

1)減少了內存佔用  因爲變量存儲字節減少

2)改善數組結構 數組元素 hash映射表分到同一塊內存,減低內存佔用,提升了cpu緩存命中率

3)執行效率提高 優化了參數傳遞的環節

交換,不使用第三變量

1)

$a = 12;

$b = 34;

$a = $a.$b

$b = substr($a,0,strlen($a)-strlen($b))

$a = substr($a,strlen($b));

2)

list($a,$b) = array($b,$a);

3)

$a=12;

$b=34;

$b=$a.#.$b;

$b=explode(#,$b);

$a=$b[1];

$b=$b[0];

JS可否定義二維數組

不可以,但可以模擬

Arr[0] = new array();

Referance && 正規變量

1)傳遞的是變量的地址,一旦變量發生改變,整個應用都可見

 

2)正規變量,傳遞的是數據的值

在現執行的腳本中插入函數庫,插入PHP函數庫

Require

include

PHP定義字符串的方式有哪些

1)單引號

2)雙引號

3)Heredoc(雙引號)

4)Nowdoc(單引號)

 

Heredoc 的結束標記不能包含任何其他的字符,除了“;”

單雙引號的區別

1)雙引號會替換變量的值,單引號會當做字符串輸出

2)轉義的支持不相同

3)性能速度問題,由於雙引號的字符串需要檢測是否含有$符號,單引號性能上更好

 

\ =>    \=>\   \\=>\   \n=>\n \r=>\r  \$=>\$

\=>\     \\=>\   \n=>  \r=>    \$=>$

 

 

 

 

 

如何獲取和修改字符串的字符

可以通過字符串函數

什麼是位,字節,字符

位:

二進制中最小的信息單位

 

字節:

把字分成一節節

計算機存儲容量的計量單位

 

字符:

符號

計算機中使用的字母,數字,漢字

轉換字符串編碼

//將字符串string  編碼由utf8轉變成gbk

iconv("utf8","gbk",$string)

 

//設置字符的編碼是utp-8

mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK");

正則表達式的引擎有哪些,區別是

DFA

  文本導向的引擎,不要求回溯,永不測試相同的字符串2次

 

NFA

  運行的是貪婪的回溯匹配算法,會反覆測試字符串,找到所有的擴展

如何測試一個正則表達式的性能

 

正則表達式的優化

使用正確的邊界匹配符(^ $)

使用正確的元字符(w d)

使用正確的量詞(+ *)

Preg_match && preg_match_all

preg_match($pattern, $subject, $matches);

print_r($matches);

Preg_replace

Preg_replace_all

 

Preg_split

 

Preg_grep

 

貪婪

懶惰

貪婪:

儘可能多

 

懶惰:

儘可能少,在後面有一個‘?’

 

 

發佈了57 篇原創文章 · 獲贊 1 · 訪問量 3741
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章