php js 比較,PHP與JS的比較

1樓

一直以來,php和js一樣,都被視做腳本語言。的確,他們兩者蠻像的。首先他們都是弱類型語言,定義變量的時候不需要指定某個具體類型,變量類型可以實現隱式轉換。雖然很多人說這樣會帶來很多一些潛在的問題,但事實上,我并沒有感到到這種潛在問題,相反的,他們帶來的編程上的方便,的確讓我感到了很大的自由。比起as3中動轍就需要加上.toString(),我太喜歡as2,js和php這樣隱式轉換的方式了。???其次呢,讓我感覺他們很像的地方在于他們編程的核心,都可以看做是函數的調用。用函數來做mvc的model,然后在面向過程的語句中,把函數調出來,傳入參數,返回需要的結果,或者直接進行了某些操作。當然了,這是他們的一些普通應用。現在已經越來越要求用oop的方式來實現編程了。怎么說呢,不論是以函數為核心實現model功能,還是以類為核心實現model功能,其實本質上是一樣的。只是php的面向對象更像java,而js的面向對象更有自己的風格。不論類的實現表現有如何不同,實質上的應用還是一樣的,定義類,通過構造函數實例化成對象,然后調用對象的方法去實現功能。和以函數為核心的編程思想,最大的不同在于代碼的組織更系統。

但他們還是有些區別的。一個最大的區別在于php中的核心功能是用函數方式實現,而js是用對象的方法實現。舉個簡單的例子說吧,如果要取得一個字符串的長度,用js是這樣寫的,var?length?=?str.length;?而php是用?$length?=?strlen(str);來實現。js是用"對象.屬性"方法來取得,而php是用"函數(參數)"的方法來取得。這讓我不由得想起了as1和as2的區別。在as1中,我們一般用"函數(參數)"的形式來取得想要的值,而到了as2,我們就習慣用"對象.屬性"的方式取得值了。比較而言,as2中的方式比as1中要直觀得多,很容易理解,寫起來會覺得順手得多。很明顯,as2比起as1,當然是進步了很多。那么我想,同樣做為腳本語言,js的內核是不是比php的內核要先進呢?記得在看《javascript高級程序設計》的時候,看到里面提到string.length的問題,很明顯,這是對象.屬性的格式,可是,string只是一個變量啊,它不是對象啊,變量可以直接有屬性嗎??其實是js的內核在解釋這里的時候,會先判斷一下結構,發現是在調用字符串型變量的屬性,就會把字符串隱式地變成對象,相當于String(string).length,再然后調用這個對象的length屬性返回來,只是這一切只在解釋到這里時隱式地進行的。雖然表面看起來是在調用字符串變量的屬性,其實仍然是在調用String對象的屬性,對string這個字符串型變量則做為構造函數的參數進行了String類的實例化。我想as2的內核也一定是進行了如此的設計,才讓as1的基于函數的模式進化到了as2中基于對象的模式了吧。我覺得這樣的方法很好啊,為什么php沒有把這種方法設計到php的內核中去呢??

另外還有一個很大的不同,在于變量的傳值問題。在js中,變量的傳值傳遞和傳址傳遞是根據傳遞的對象的類型決定的,不能自己隨心控制。具體來說,js中的基本類型,比如說字符型,數字型,布爾型都是用的傳值方式,而復雜數據類型,比如對象型和數組型是采用的傳址方式。這些都沒辦法自己控制的。所以在js的繼承問題上,才有用for(?in?)的方式,把對象中的屬性一項一項傳給別一個對象的屬性,來實現繼承,在改變子類的時候,不影響超類(當然,有更好的方法,用call()方法)。這樣是繞了多大一個圈子啊!相比而言,php的傳值問題就強大多了,php中所有類型都可以自由控制其傳值是傳值還是傳址,在變量前加上&就可以變成傳址方式,不加&就是傳值方式。這樣,在傳數組和對象的時候,真是太方便了。這點,js應該跟php學了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531675.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

codeforces Restore Cube(暴力枚舉)

1 /*2 題意:給出立方體的每個頂點的坐標(是由源坐標三個數某幾個數被交換之后得到的!), 3 問是否可以還原出一個立方體的坐標,注意這一句話:4 The numbers in the i-th output line…

php 非遞歸調用,php 無限分類(非遞歸)

/*** 無限分類* 2011/8/24* kcj* */include "../conn/conn.php";$flpid$_POST[flpid];$fltitle$_POST[title];$fldes$_POST[des];if(isset($_POST[action])!&&$_POST[action]"add"){ // 無限分類(非遞歸),用路徑來判斷分類歸屬(flidflp…

樹狀數組三種模型

樹狀數組在區間求和問題上有大用,其三種復雜度都比線段樹要低很多……有關區間求和的問題主要有以下三個模型(以下設A[1..N]為一個長為N的序列,初始值為全0):(1)“改點求段”型,即對…

php實現直播答題系統,直播答題解決方案

概述即構提供直播答題一站式解決方案,包括 Windows 主播端、移動 APP 端示例源代碼(iOS、Android)。1 下載/體驗地址由于直播答題場景需要主播端(推流、發題)和觀眾端(拉流、答題)配合使用,因此開發者需要同時下載這兩端的軟件。下載后,具體的…

poj 3486 A Simple Problem with Integers(樹狀數組第三種模板改段求段)

1 /*2 樹狀數組第三種模板&#xff08;改段求段&#xff09;不解釋&#xff01; 不明白的點這里&#xff1a;here&#xff01;3 */4 #include<iostream>5 #include<cstring>6 #include<cstdio>7 #include<algorithm>8 #define N 1000059 us…

php路由類默認模塊,微擎入口路由及其模塊入口路由 - YangJunwei

一、微擎入口路由微擎有2個入口文件/web/index.php?csite&aentry/app/index.php?centry路由變量$controller $_GPC[c]; //web入口缺省值account&#xff0c;app入口home$action $_GPC[a]; //index.php入口文件開頭$acl變量可配置默認方法$do $_GPC[do];不管$action是什…

matlab subs 慢,求助matlab程序計算速度過慢的原因

程序代碼如下function [length]contactlength(x0)if x0>50||x0error:數據超出尺寸范圍elsesyms xR300;%非球面頂點曲率半徑c1/R;delta0.1;k-3.3;%非球面參數rb27;%半徑y(-1*c*x.^2)./(1sqrt(1-(1k)*(c^2)*x.^2));dydiff(y);dy2diff(y,2);dyx0subs(dy,x0);dy2x0subs(dy2,x0);…

matlab r2010a教程,MATLAB教程R2010a(十二五)

第1章 基礎準備及入門1.1 MATLAB的安裝和工具包選擇1.2 Desktop操作桌面的啟動1.2.1 MATLAB的啟動1.2.2 Desktop操作桌面簡介1.3 Command Window運行入門1.3.1 Commancl Winelow指令窗簡介1.3.2 最簡單的計算器使用法1.3.3 數值、變量和表達式1.4 Command Window操作要旨1.4.1 …

java中解決組件重疊的問題(例如鼠標移動組件時)

java中解決組件覆蓋的問題&#xff01; 有時候在移動組件的時候會出現兩個組件覆蓋的情況&#xff0c;但是你想讓被覆蓋的組件顯示出來或者不被覆蓋&#xff01;在設計GUI時已經可以定義組件的疊放次序了&#xff08;按擺放組件的先后順序&#xff09;。 真正麻煩的是響應哪…

matlab橋梁受力計算公式,matlab橋梁計算

等級&#xff1a;文件 218KB格式 pdf內容簡介 該文結合斜拉橋施工監控的工程實踐&#xff0c;分析研究利用MATLAB 6&#xff0e;0神經網絡算法&#xff0c;可實現模式識別和函數逼近&#xff0c;進行信號處理&#xff0c;利用人工智能進行自動控制及非線性預測等。斜拉橋智能施…

php自然排序法的比較過程,PHP中strnatcmp()函數“自然排序算法”進行字符串比較用法分析(對比strcmp函數)...

本文實例講述了PHP中strnatcmp()函數“自然排序算法”進行字符串比較用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;PHP中strnatcmp()函數使用"自然"算法來比較兩個字符串(區分大小寫)&#xff0c;通常在自然算法中&#xff0c;數字 2 小于數字 10。而…

2014 網選 5014 Number Sequence(異或)

1 /*2 題意&#xff1a;a, b兩個序列&#xff0c;規定由[0, n]區間的數&#xff01;3 求 a[i] ^ b[i] 的和最大&#xff01; 4 5 思路&#xff1a;如果數字 n的二進制有x位&#xff0c; 那么一定存在一個數字m&#xff0c;使得n^m的所有二進制位6 都是1&am…

2014 網選 5007 Post Robot(暴力或者AC_自動機(有點小題大作了))

//暴力&#xff0c;從每一行的開始處開始尋找要查詢的字符 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;char str[100005];int main(){while(gets(str)){for(int i0; str[i]; i)if(str[i]A){if(s…

java 如何放大動畫圖,Android仿微信圖片放大動畫

&#xff03;今年三月份直接上手做的android&#xff0c;代碼寫的不規范&#xff0c;有問題希望指出&#xff0c;謝謝(app數英)類似于微信 圖片瀏覽的效果&#xff0c;我的做法是在兩個activity A\B之間傳遞圖片的位置信息思路&#xff1a;在activity A的list view上有一張圖片…

2014 網選 5012 Dice(bfs模板)

1 /*2 題意&#xff1a;就是給定兩個篩子&#xff0c;每個篩子上6個面&#xff0c;每個面的數字屬于[1,6]&#xff0c; 且互不相同&#xff01;3 問a篩子最少經過按照題目規定的要求轉動&#xff0c;達到和b篩子上下左右前后的數字相同&#xff01;4 5 思路&am…

matlab 神經網絡dpi,基于DPI和BP神經網絡的P2P流量識別研究

研究與開發 現代計算機 2019.04 上 文章編號&#xff1a;1007-1423(2019)10-0031-05 DOI&#xff1a;10.3969/j.issn.1007-1423.2019.10.007 基于 DPI 和 BP 神經網絡的 P2P 流量識別研究 萬建偉&#xff0c;胡勇 (四川大學電子信息學院&#xff0c;成都 610021) 摘要&#xff…

2014 網選 5011 Game(Nim游戲,數學題)

/*題意&#xff1a;Nim游戲&#xff01; 思路&#xff1a;通過異或&#xff0c;判斷將n個數表示成二進制的形式之后&#xff0c;是否對應位的數字1 的個數是偶數&#xff01; */ #include<iostream> using namespace std;int main(){int n, x, s;while(cin>>n){s…

漢諾塔實踐python,Python練習題11:漢諾塔實踐

在終端輸出如下信息--python在終端輸出如下信息--python ???????????????????????????????????????????????????????????????????????????????????????????????? 描述 練習一…

oracle授權只讀用戶,Oracle創建只讀用戶(賬號)的方法

第一步&#xff1a;創建用戶(需要使用有dba管理員權限的用戶創建一個新的用戶&#xff0c;比如system)create user 用戶名 identified by 密碼 default tablespace 表空間;第二步&#xff1a;賦連接權限grant connect to 用戶名;grant Resource to 用戶名;權限分類&#xff1a;…

java中圖片文件的傳輸及顯示(Socket以及ServerSocket演示)

//客戶端部分 package testSix;import java.awt.Graphics; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.util.Iterator;import javax.imageio.ImageIO; import …