您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關php的語法和c語言有哪些區別,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
語法上的區別:1、PHP使用define函數來定義常量,c語言不是;2、php的所有的變量名前都要帶個“$”,c語言不用;3、PHP不管常量還是變量都不需要先定義后使用(類中的變量除外)。
語法上,php和C語言的區別
常量
在PHP中定義常量的方式在學習C的人看來有點不可思議,竟然是用一個define函數實現的,PHP的函數實在是太厲害了,后面我們會看到定義數組也是由函數完成的,我們真得感謝PHP無比豐富的函數庫,它們成就了PHP的易用和強大。
define函數原型:bool define(string name,value,[,bool case_insensitive])
第三個參數如果是TRUE,則表示常量名是大小寫不敏感的,反之就是敏感的,默認是敏感的。我們還是遵照習慣,保持常量名稱大小寫敏感吧。
例:
<?php define(“C1”,”Hello PHP World!”); echo C1; ?>
以上代碼的運行結果是輸出常量C1的值(Hello PHP World!)。
這里順便介紹一下,<?php
和?>
是PHP代碼的定界符,將PHP代碼同HTML代碼區分出來,PHP代碼的語句以分號結束,這是我們習慣的,另外PHP的注釋符號也與C一樣,你該知道的,我就不說了……這個echo就相當于C的printf或C++的cout,但是嚴格地說不是格式化的輸出,要想格式化也很容易,你把HTML代碼寫進去就行了,比如你要輸出結束后換行,那你就寫成define(“C1”,”Hello PHP World!<br>”);
好了。注意,PHP也支持‘\n’作為換行符,但是它的含義僅僅相當于在HTML里敲個回車,瀏覽器里看還是在一行上的。
變量
除了不用定義,C語言用戶最不習慣的就是所有的變量名前都要帶個$,你可能會抱怨PHP的設計者太財迷了,但抱怨完了你還得這么寫,寫PHP程序,Shift鍵的使用率陡增!我突然發現一個這樣做的好處是:常量不帶$,因此常量與變量的區分變得很明顯,更重要的是,你再也不用擔心自定義變量名同PHP關鍵字沖突了,你可以定義一個變量叫$if,$for等(當然,正式情況下還是不要這樣做的好,過過癮就行了)。
與C相同的是,PHP的變量名是大小寫敏感的,并且命名方式遵循C標識符的命名原則,還記得嗎?
如果你懂點C++,知道引用的概念,下面這段就可以跳過,只要記住PHP也支持引用。否則花點時間看下面這段或是去看看C++引用的概念也行。
<?php $var1=100; $var2=&$var1; $var2=200; echo $var1.”<br>”; echo $var2; ?>
這段代碼的運行結果是輸出兩個200,分別是$var1和 $var2的值,輸出的時候為了清楚加了個換行符,PHP里句點(.)是字符串的連接符。
為什么只給$var2賦了200,而$var1也變成了200呢,你還可以試試只改變$var1的值,你會發現這兩個變量似乎被綁在一起了。其實語句$var2=&$var1;中的&符號的含義是將變量名$var2也指向$var1所在的存儲空間,也就是說$var2并不是一個新變量,而是$var1的另一個名字,它們對應的是同一段內存空間,不管使用誰都是訪問的同一個變量,$var2就叫做對$var1的引用。引用有什么好處?以后再說。C語言的基本概念(變量名、變量地址、變量值)清楚的話,理解起來應該沒有什么困難,如果基本概念不清楚,還是先“溫故”再“知新”吧。
順便說一個有意思的事,如果你在把上面的echo語句寫成:
echo “The value of $var1 is ”.$var1.”<br>”;
那么你得到的輸出將是:
The value of 200 is 200
還記得嗎,在初學C語言時你很可能犯過把變量名放在字符串里想輸出它的值,結果得到的是變量名,而現在,你的“理想”實現了,而你卻又不習慣了,呵呵。原來PHP在使用雙引號作為字符串的定界符時,會自動把變量名替換成相應的值,這樣的做法使得我們輸出含變量的字符串時變得非常方便,一對雙引號下來就可以了。如果你想保持變量名原樣輸出,那么可以用單引號做字符串的定界符(當然還有其它辦法,你可以仔細研究一下PHP的字符串)。還是要感謝C的嚴格要求,如果C像PHP這樣的話,我們恐怕到現在也搞不清變量名、變量值這些概念。
變量的作用域
PHP的變量作用域與C很類似,在此不準備多說。局部變量在所存在的函數內部有效,全局變量作用域是文件作用域(限于單個PHP文件),若局部變量同全局變量重名,同C的處理方式,全局的被屏蔽。稍微麻煩一點的是,要想在函數內訪問全局變量,需使用global關鍵字聲明,否則的話PHP就認為是一個與全局變量同名的局部變量。
<?php $a=1; function func() { echo "The value of a is:".$a; } func(); ?>
以上代碼沒有輸出1,為什么呢?PHP把函數里的$a看作是一個全新的局部變量,此$a非彼$a(函數體外的全局變量),此$a未賦值,因此輸出為空。如果我們要想在函數體內部訪問全局變量$a的值,須在訪問之前聲明一句:global $a; 這樣PHP就知道要訪問的是全局變量$a了。
還有一種方法是利用PHP的系統數組$GLOBALS,該數組是PHP系統自動生成和維護的,它記錄了所有全局變量。echo $GLOBALS[“a”];
即可輸出其中$a的值。
PHP的靜態變量僅在局部函數域中存在,同C是完全相同的。
PHP有一種特殊的動態變量,名字聽起來很容易讓人認為就是C語言的普通變量(動態的、局部的),但這個動態的含義有點特殊,它是指變量名可以動態賦予!也就是說,可以讓應用程序的最終用戶為變量指定名字!
<?php $a="newname"; a="content";//newname本是$a的值,但是a的含義是以$a的值為名的變量 echo $newname; //$$a等價于 $newname echo $a; ?>
運算符和表達式
PHP在運算符和表達式方面和C極其類似,有算術、邏輯、關系、位運算符及相應的表達式,也有條件運算符(:?)及其表達式,同樣還是我們開始提到的那個思想,實用為上,很多限制被取消了,相對較寬松。舉個例子:
<?php $a="1"; $b=1; if ($a==$b) echo "Equal!"; else echo "Not Euqal!"; ?>
按照C的思維方式來看,$a是字符,$b是整型,兩者比較是字符的ASCII碼值與整數比較,顯然不等,而PHP運行結果卻是“Equal!”,看到這里,是不是有點沖破封建大家庭的禮教與心上人私奔的感覺?呵呵,抑或是驚呼PHP無法無天?接下來還有讓你目瞪口呆的,若$a="1e3"; $b=1000; 依然是“Equal!”,也就是說PHP在比較時能自動將字符串“按照人的理解方式”進行轉換,1e3不就是科學計數法表示的1000嗎?甚至$a=”1e3HelloWorld”;都會相等,PHP將字符串轉換為數值時會自動截取全部它能理解為數值的部分!其實C也允許跨越數據類型的比較,比如字符型和整型比較,C也會自動轉換類型,但它是“按照計算機的思維方式”轉換的,因為字符在計算機里就是按照ASCII碼存儲的。
PHP的“人性化”也帶來了麻煩,當我們想嚴格比較兩個變量的時候怎么辦呢?于是PHP提供了一對特殊的運算符:全等(===)和非全等(!==),只有當值相當且數據類型相同時,才叫全等,兩者有一不符,則非全等。此時,即使1與1.0也是非全等的,原因你一定知道吧。如果你覺得只有這樣才踏實,那么恭喜你,你已經被C洗腦了。
運算符有優先級和結合性的概念,這方面和C是類似的,你也許記不清所有的優先級關系,但是沒關系,我們有括號呢。
PHP的數據類型
PHP與C的一個顯著不同是:不管常量還是變量都不需要先定義后使用(類中的變量除外),PHP根據第一次賦值的情況自動決定數據類型。想想當年學習C語言的時候,我們曾感到先定義后使用很麻煩(但是“長大后”(我是指學會C后)都體會到了它的好處),常常忘記定義,而現在少了這條規矩,反而有點不適應了。
PHP的基本變量類型有整型(Integer)、浮點型(Float)、字符串(String)(這是C沒有的,但C++有String類)以及布爾型(Boolean)(C沒有,但是C++有)。構造類型有數組和對象。此外還有兩個特殊類型:空值(NULL)(C也有)和資源(Resource)。
關于“php的語法和c語言有哪些區別”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。