php js 比较,PHP与JS的比较
1樓
一直以來(lái),php和js一樣,都被視做腳本語(yǔ)言。的確,他們兩者蠻像的。首先他們都是弱類型語(yǔ)言,定義變量的時(shí)候不需要指定某個(gè)具體類型,變量類型可以實(shí)現(xiàn)隱式轉(zhuǎn)換。雖然很多人說(shuō)這樣會(huì)帶來(lái)很多一些潛在的問(wèn)題,但事實(shí)上,我并沒(méi)有感到到這種潛在問(wèn)題,相反的,他們帶來(lái)的編程上的方便,的確讓我感到了很大的自由。比起as3中動(dòng)轍就需要加上.toString(),我太喜歡as2,js和php這樣隱式轉(zhuǎn)換的方式了。???其次呢,讓我感覺(jué)他們很像的地方在于他們編程的核心,都可以看做是函數(shù)的調(diào)用。用函數(shù)來(lái)做mvc的model,然后在面向過(guò)程的語(yǔ)句中,把函數(shù)調(diào)出來(lái),傳入?yún)?shù),返回需要的結(jié)果,或者直接進(jìn)行了某些操作。當(dāng)然了,這是他們的一些普通應(yīng)用。現(xiàn)在已經(jīng)越來(lái)越要求用oop的方式來(lái)實(shí)現(xiàn)編程了。怎么說(shuō)呢,不論是以函數(shù)為核心實(shí)現(xiàn)model功能,還是以類為核心實(shí)現(xiàn)model功能,其實(shí)本質(zhì)上是一樣的。只是php的面向?qū)ο蟾駄ava,而js的面向?qū)ο蟾凶约旱娘L(fēng)格。不論類的實(shí)現(xiàn)表現(xiàn)有如何不同,實(shí)質(zhì)上的應(yīng)用還是一樣的,定義類,通過(guò)構(gòu)造函數(shù)實(shí)例化成對(duì)象,然后調(diào)用對(duì)象的方法去實(shí)現(xiàn)功能。和以函數(shù)為核心的編程思想,最大的不同在于代碼的組織更系統(tǒng)。
但他們還是有些區(qū)別的。一個(gè)最大的區(qū)別在于php中的核心功能是用函數(shù)方式實(shí)現(xiàn),而js是用對(duì)象的方法實(shí)現(xiàn)。舉個(gè)簡(jiǎn)單的例子說(shuō)吧,如果要取得一個(gè)字符串的長(zhǎng)度,用js是這樣寫(xiě)的,var?length?=?str.length;?而php是用?$length?=?strlen(str);來(lái)實(shí)現(xiàn)。js是用"對(duì)象.屬性"方法來(lái)取得,而php是用"函數(shù)(參數(shù))"的方法來(lái)取得。這讓我不由得想起了as1和as2的區(qū)別。在as1中,我們一般用"函數(shù)(參數(shù))"的形式來(lái)取得想要的值,而到了as2,我們就習(xí)慣用"對(duì)象.屬性"的方式取得值了。比較而言,as2中的方式比as1中要直觀得多,很容易理解,寫(xiě)起來(lái)會(huì)覺(jué)得順手得多。很明顯,as2比起as1,當(dāng)然是進(jìn)步了很多。那么我想,同樣做為腳本語(yǔ)言,js的內(nèi)核是不是比php的內(nèi)核要先進(jìn)呢?記得在看《javascript高級(jí)程序設(shè)計(jì)》的時(shí)候,看到里面提到string.length的問(wèn)題,很明顯,這是對(duì)象.屬性的格式,可是,string只是一個(gè)變量啊,它不是對(duì)象啊,變量可以直接有屬性嗎??其實(shí)是js的內(nèi)核在解釋這里的時(shí)候,會(huì)先判斷一下結(jié)構(gòu),發(fā)現(xiàn)是在調(diào)用字符串型變量的屬性,就會(huì)把字符串隱式地變成對(duì)象,相當(dāng)于String(string).length,再然后調(diào)用這個(gè)對(duì)象的length屬性返回來(lái),只是這一切只在解釋到這里時(shí)隱式地進(jìn)行的。雖然表面看起來(lái)是在調(diào)用字符串變量的屬性,其實(shí)仍然是在調(diào)用String對(duì)象的屬性,對(duì)string這個(gè)字符串型變量則做為構(gòu)造函數(shù)的參數(shù)進(jìn)行了String類的實(shí)例化。我想as2的內(nèi)核也一定是進(jìn)行了如此的設(shè)計(jì),才讓as1的基于函數(shù)的模式進(jìn)化到了as2中基于對(duì)象的模式了吧。我覺(jué)得這樣的方法很好啊,為什么php沒(méi)有把這種方法設(shè)計(jì)到php的內(nèi)核中去呢??
另外還有一個(gè)很大的不同,在于變量的傳值問(wèn)題。在js中,變量的傳值傳遞和傳址傳遞是根據(jù)傳遞的對(duì)象的類型決定的,不能自己隨心控制。具體來(lái)說(shuō),js中的基本類型,比如說(shuō)字符型,數(shù)字型,布爾型都是用的傳值方式,而復(fù)雜數(shù)據(jù)類型,比如對(duì)象型和數(shù)組型是采用的傳址方式。這些都沒(méi)辦法自己控制的。所以在js的繼承問(wèn)題上,才有用for(?in?)的方式,把對(duì)象中的屬性一項(xiàng)一項(xiàng)傳給別一個(gè)對(duì)象的屬性,來(lái)實(shí)現(xiàn)繼承,在改變子類的時(shí)候,不影響超類(當(dāng)然,有更好的方法,用call()方法)。這樣是繞了多大一個(gè)圈子啊!相比而言,php的傳值問(wèn)題就強(qiáng)大多了,php中所有類型都可以自由控制其傳值是傳值還是傳址,在變量前加上&就可以變成傳址方式,不加&就是傳值方式。這樣,在傳數(shù)組和對(duì)象的時(shí)候,真是太方便了。這點(diǎn),js應(yīng)該跟php學(xué)了。
總結(jié)
以上是生活随笔為你收集整理的php js 比较,PHP与JS的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java中两种添加监听器的策略
- 下一篇: 坦克300自启动后行驶里程是什么意思