每個人都曾試圖在平淡的學(xué)習(xí)、工作和生活中寫一篇文章。寫作是培養(yǎng)人的觀察、聯(lián)想、想象、思維和記憶的重要手段。大家想知道怎么樣才能寫一篇比較優(yōu)質(zhì)的范文嗎?以下是小編為大家收集的優(yōu)秀范文,歡迎大家分享閱讀。
php是弱類型還是強類型篇一
導(dǎo)語:php是弱類型,動態(tài)的語言腳本。在申明一個變量的時候,并不需要指明它保存的數(shù)據(jù)類型。下面就由小編為大家介紹一下php弱類型變量是如何實現(xiàn)的吧,歡迎大家閱讀!
例如:
$var=1;
$var="variable";
$var=1.00;
$var=array();
$var=newobject();
動態(tài)變量,在運行期間是可以改變的,并且在使用前無需聲明變量類型。
問題一、zend引擎是如何用c實現(xiàn)這種弱類型的'呢?
實際上,在php中聲明的變量,在ze中都是用結(jié)構(gòu)體zval來保存的。
首先我們打開zend/zend.h來看zval的定義:
typedefstruct_zval_structzval;
struct_zval_struct{
/*variableinformation*/
zvalue_valuevalue;/*value*/
zend_uintrefcount__gc;
zend_uchartype;/*activetype*/
zend_ucharis_ref__gc; };
typedefunion_zvalue_value{ longlval;/*longvalue*/
doubledval;/*doublevalue*/
struct
{ char*val;
intlen;
}str; hashtable*ht;
/*hashtablevalue*/ zend_object_valueobj;
}zvalue_value;
zend/zend_types.h:
typedefunsignedcharzend_bool;
typedefunsignedcharzend_uchar;
typedefunsignedintzend_uint;
typedefunsignedlongzend_ulong;
typedefunsignedshortzend_ushort;
從上述代碼中,可以看到_zvalue_value是真正保存數(shù)據(jù)的關(guān)鍵部分。通過共用體實現(xiàn)的弱類型變量聲明
問題二、zend引擎是如何判別、存儲php中的多種數(shù)據(jù)類型的呢?
中存儲著一個變量的真正類型,根據(jù)type來選擇如何獲取zvalue_value的值。
type值列表(zend/zend.h):
#defineis_null 0
#defineis_long 1
#defineis_double 2
#defineis_bool 3
#defineis_array 4
#defineis_object 5
#defineis_string 6
#defineis_resource 7
#defineis_constant 8
#defineis_constant_array 9
來看一個簡單的例子:
$a=1; //=is_long,就去取lval.
$a=array();
//=is_array,就去取ht.
這其中最復(fù)雜的,并且在開發(fā)第三方擴展中經(jīng)常需要用到的是”資源類型”.
在php中,任何不屬于php的內(nèi)建的變量類型的變量,都會被看作資源來進行保存。
比如:數(shù)據(jù)庫句柄、打開的文件句柄、打開的socket句柄。
資源類型,會用lval,此時它是一個整型指示器, 然后php會再根據(jù)這個指示器在php內(nèi)建的一個資源列表中查詢相對應(yīng)的資源。
正是因為ze這樣的處理方式,使php就實現(xiàn)了弱類型,而對于ze的來說,它所面對的永遠都是同一種類型zval。
s("content_relate");【php弱類型變量是如何實現(xiàn)的】相關(guān)文章:
php變量類型和整型類型細節(jié)
08-18
php數(shù)據(jù)類型之數(shù)組變量詳解09-17
php的變量09-20
php變量介紹09-20
php的變量介紹08-21
php如何實現(xiàn)快速排序09-02
如何用php實現(xiàn)找回密碼09-21
php如何實現(xiàn)驗證碼09-01
php的變量是什么09-30
【本文地址:http://www.aiweibaby.com/zuowen/2655243.html】