當前位置:首頁 » 編程語言 » php底層

php底層

發布時間: 2022-12-18 14:03:30

『壹』 怎麼理解【前台php,中間件用java,底層用C/C++】

通常來說,做一個中小型網站或Web應用不會用多種服務端語言環境。
根據你所需要的網站需求決定要使用的技術架構。

首先PHP不是WEB前台技術(HTML+CSS+JavaScript才是,PHP與Web前端關系不大,這一點很多人都搞不清楚),PHP也是服務端的,說前台PHP個人感覺描述不當,你可以說表層PHP更准確點。PHP是解釋性語言,語言靈活、約束少、容錯高,即使代碼語法上寫錯了也未必影響整個網站的運行,適合實現低邏輯密度的業務處理。另外PHP的一些成熟框架也是支持插入中間件的。像博客、論壇、門戶網站等適合用PHP實現。

Java是一門比較健壯的語言環境,強類型、半編譯,可在運行時對自身代碼進行認知(反射),Java作為開源熱門,用Java編寫的實用工具如海洋般廣闊,所以利用Struts、Spring等成熟的JavaEE框架可以很方便地將這些工具作為中間層放置到Web應用當中。中間件通常是放置在原始服務端與客戶端之間的一個處理層,可能是個程序,也可能是一個伺服器(電腦),用於對原始數據進行進一步加工、篩選。Java十分適合製作業務邏輯比較復雜,對安全性、正確性與運行效率要求較高的網站或Web服務。像銀行系統、支付平台、在線聊天、網頁游戲等適合Java實現。

C/C++是目前大部分操作系統編寫時所用的語言,所以用C/C++可以很輕易地接觸到操作系統最底層的介面,C/C++很少用於網站或Web服務的開發。另外C/C++的編譯是平台相關的,同時也是平台最優化的,所以在復雜數據結構、演算法的處理能力上相較於其他語言有很大的優勢。像大型網游的伺服器可能由C/C++實現。

『貳』 php依賴倒置原則裡面,什麼叫高層模塊和底層模塊

1、可以簡單的理解:調用者為高層,被調用者為低層。
2、
比如你有class A和class B
在class A中有對class B的引用,例如A中有某方法有這樣一段代碼 B b=new B();var data=b.GetData();
那麼class A就是高層模塊
被引用的class B就是低層模塊
當然這個B可以是class 也可以是interface

『叄』 php底層原理 php是如何運行的

1、PHP動態語言執行過程:拿到一段代碼後,經過詞法解析、語法解析等階段後,源程序會被翻譯成一個個指令(opcodes),然後ZEND虛擬機順次執行這些指令完成操作。PHP本身是用C實現的,因此最終調用的也是C的函數,實際上,我們可以把PHP看做一個C開發的軟體。

2、PHP的4層運行體系:

(1)Zend引擎:Zend整體用純C實現,是PHP的內核部分,他將PHP代碼翻譯(詞法、語法解析等一系列編譯過程)為可執行opcode的處理並實現相應的處理方法、實現了基本的數據結構(如:hashtable、OO)、內存分配機制及管理、提供了相應的api方法供外部調用,是一切的核心,所有的外圍功能均圍繞Zend實現。

(2)Extensions:圍繞著Zend引擎,extensions通過組件式的方式提供各種基礎服務,我們常見的各種內置函數(array系列)、標准庫等都是通過extension來實現,用戶也可以根據需要實現自己的extension的典型應用)。

(3)Sapi:Sapi全稱,也就是服務端應用編程介面,Sapi通過一系列鉤子函數,使得PHP可以和外圍交互數據,這是PHP非常優雅和成功的設計,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行兼容,而應用本身也可以針對自己的特點實現不同的處理方式。

(4)上層應用:這就是我們平時編寫的PHP程序,通過不同的spai方式得到各種各樣的應用模式,如何通過webserver實現web應用、在命令行下已腳本方式運行等等。

『肆』 PHP做底層是否能夠支撐龐大的流量群

統計ip,每次有用戶訪問頁面都記錄IP,如果在當天的ip數據中不存在此IP就寫入資料庫【一個ip一天只記錄一次】
時間:用戶登錄時記錄登錄時間,以後用戶每次連接資料庫都更新最後在線時間,對這2個時間做比對,就是時間差,也就是在線時長

『伍』 深入了解php底層需要了解哪些語言

php 底層是C 語言,故如果想研究底層代碼需要掌握C言語相關知識。
php 的zend引擎,包括詞法分析,語法分析,AST 等需要掌握編譯原理的知識。

『陸』 PHP變數的底層實現

我們解壓PHP的源碼包, 看到如下的目錄

其中,

最核心的---Zend目錄, 這是zend虛擬的實現. 包括棧,數據類型,編譯器等,都在這實現.

最主要的main --PHP的一些內建函數,最主要函數都在這里放著.

最大的一個目錄ext -- PHP的擴展.

PHP的大部分功能,都是以extenstion形式來完成的.

如果你開發了一個擴展,也放在ext目錄下.

Zend對變數的表示:

答: zend實現了 zval結構體

{

value: [聯合體] ,聯合體的內容可能是c語言中的long,double,hashtable...

type:變數類型 , IS_NULL,IS_BOOL,IS_STRING...... IS_RESOURCE

refcount_gc

is_ref_gc

}

如:

$a = 3;

{

value : [long lval = 3]

type: IS_LONG

}

$a = 3.5

{

value: [double dval = 3.5]

type:IS_DOUBLE

疑問:

PHP中有8種數據類型,為什麼zval->value 聯合體中,只有5種?

答:

1: NULL,直接 zval->type = IS_NULL,就可以表示,不必設置  value的值.

2: BOOL型 , zval->type = IS_BOOL, 再設置 zval.value.lval = 1/0;

3: Resourc型 ,資源型 往往是伺服器上打開的一個介面,如果 文件讀取介面.

zval->type = IS_RESOURCE, zval->tyoe.lval =伺服器上打開的介面的編號

發現:

PHP中,字元串類型,長度是已經緩存的,調用strlen時,系統可以直接返回其長度,不必計算.

『柒』 PHP簡單的解釋是什麼意思

php是一種語言,編譯和運行php語言程序的程序是用c語言寫的。在和伺服器並行提到PHP時,這個PHP不是語言的意思,而是指運行php語言的環境。在提到某個php頁面時,這個php指的是以php為後綴的文件,稱為php文件,php文件可以不包含php語言,但是php語言必須寫在php文件中。php是一個多含義的詞,不能使用教條來解釋,而應該根據具體環境來解釋。

『捌』 問個問題,java和php和javascript他們底層是不是都是c/c++編寫的,都是c/c++上層語言

唔,他們的程序又不是編譯成機器碼了,還有Python Ruby Go也是。解釋器都是用C/C++寫的,其實也可以用某些其他語言。

『玖』 php是用什麼語言開發的,c語言嗎

php的解釋器是用c寫的,解釋器相當於弱編譯器,但是php本身並不基於某種底層語言。

PHP在伺服器端執行的腳本語言,與C語言類似,是常用的網站編程語言。它驅動全球超過2億多個網站,有全球超過81.7%的公共網站在伺服器端採用PHP。PHP常用的數據結構都內置了,使用起來方便簡單,也一點都不復雜,表達能力相當靈活。

(9)php底層擴展閱讀

主要特點

(一)開源性和免費性

由於PHP的解釋器的源代碼是公開的,所以安全系數較高的網站可以自己更改PHP的解釋程序。另外,PHP 運行環境的使用也是免費的。

(二)快捷性

PHP是一種非常容易學習和使用的一門語言,它的語法特點類似於C語言,但又沒有C語言復雜的地址操作,而且又加入了面向對象的概念,再加上它具有簡潔的語法規則,使得它操作編輯非常簡單,實用性很強。

(三)資料庫連接的廣泛性

PHP可以與很多主流的資料庫建立起連接,如MySQL、ODBC、Oracle等,PHP是利用編譯的不同函數與這些資料庫建立起連接的,PHPLIB就是常用的為一般事務提供的基庫。

參考資料來源:網路-PHP

『拾』 PHP 數組的底層實現

PHP 數組的底層主要是通過 HashTable 實現,HashTable 通過映射函數或者散列函數將 String Key 轉換成一個普通的數字下標,然後再將 Value 值存儲到下標對應的數組元素中

HashTable 主要包含兩部分:1.存儲元素的數組 2.散列函數或者映射函數

隨機訪問
如果我們指定一個 Key=>Value 的映射關系,Key 是一個 String 類型的,則先通過 Time 33 演算法將 String 轉換成一個 Int 整型,然後再通過 PHP 裡面特定的散列演算法映射成 Bucket 數組中的一個下標,將 Value 值存儲到對應的下標元素中,當我們通過 Key 訪問數組元素時,只需要再通過相同的演算法計算出對應的 Key,就能實現隨機訪問數組元素

順序訪問
存儲在 HashTable 中的數組是無序的,但是 PHP 中的數組是有序的,為了實現 HashTable 的有序性,PHP 引入了一個中間映射表,該表是一個大小和 Bucket 數組相同的數組,數組中存放的是整形數據,主要用於存放元素實際存儲的 Value 的下標值,當引入中間映射表之後,Bucket 中的數據是有序的,而中間映射表中的數據是無序的,當我們順序訪問的時候只需要遍歷 Bucket 中的數據即可

Hash 沖突
PHP 解決 Hash 沖突採用的是鏈地址法,將出現沖突的 Bucket 串成鏈表,這樣通過中間映射表映射出來的就不再是一個元素而是一個鏈表,通過散列函數定位到對應的 Bucket 鏈表時,需要遍歷鏈表,逐個對比 key 值,直至找出對應的目標值

PHP 實現擴容
1.當刪除的元素所佔比例超出閾值的時候,則需要移除已經被邏輯刪除的 Bucket,將後面的 Bucket 補位到前面,因為 Bucket 的下標發生了變動,所以需要更新每元素在中間映射表中實際存儲的下標值
2.當沒有超出閾值的時候,PHP 會申請一個大小是原來兩倍的新數組,並將舊數組中的數據復制到新數組中,因為數組長度發生了變化,所以 key->value 的映射關系需要重新計算,這個就是重建索引

熱點內容
輔助官網源碼 發布:2024-05-20 07:31:48 瀏覽:865
androidbutton的屬性 發布:2024-05-20 07:18:58 瀏覽:636
查找重復欄位的sql 發布:2024-05-20 07:18:17 瀏覽:302
我的世界創造房子伺服器 發布:2024-05-20 06:48:36 瀏覽:818
小米筆記本存儲不夠 發布:2024-05-20 06:32:53 瀏覽:784
dirt5需要什麼配置 發布:2024-05-20 06:02:58 瀏覽:543
怎麼把電腦鎖上密碼 發布:2024-05-20 05:19:09 瀏覽:985
安卓為什麼連上wifi後沒有網路 發布:2024-05-20 05:17:50 瀏覽:419
安卓usb在設置哪裡 發布:2024-05-20 05:03:03 瀏覽:187
綏化編程 發布:2024-05-20 04:59:44 瀏覽:991