閱讀時長:10分鐘編程
技術預備:瞭解任意一門編程語言數組
經過上一篇的學習,相信童鞋們已經搭好了基本的PHP開發環境。bash
這篇開始就正式進入PHP的學習。數據結構
學習一門語言就確定避免不了學習他的語法了,可是童鞋們別怕,PHP的語法很是簡單。app
記得我剛開始接觸PHP的時候,看了兩個鐘的語法,就直接跑去修BUG。編程語言
後來就踏上了世界上最好的語言這條不歸路……函數
言歸正傳,下面開始今天的課程。學習
關於PHP的語法相信網上已經有許多教程了,像W3school、菜鳥教程等,一些很基礎的語法我就跳過了,主要講解一些和其餘語言不太同樣而且須要注意的地方。ui
在這裏我打算分幾個章節來說解PHP的基礎語法,其中第一章節講解普通變量和數組,第二章節講解運算符、函數和麪向對象,第三章節就……沒有了。spa
什麼??兩個章節就講完了?你不信PHP這麼簡單?你說你當初學Java基礎語法學了一個月?那就接着往下看吧。
學習過Java或C語言之類的強類型語言的童鞋們應該很清楚,在這類語言中聲明變量必須註明變量類型
如
int a = 123;
String str = "HelloWorld";
a = str; // 若是進行跨類型賦值則會報錯
複製代碼
而像Javascript就是弱類型語言,也就是各個變量之間都是能夠相互賦值的,聲明變量只須要用一個var或者let關鍵字就能夠聲明一個變量。
如
var a = 123;
var str = "HelloWorld";
a = str;// 弱類型語言能夠跨類型賦值
複製代碼
PHP一樣是弱類型語言,聰明的童鞋們已經想到了,那他聲明變量也應該像JS同樣加一個var之類的關鍵字去聲明吧。
答案是
沒有!!!
沒有!!!
沒有!!!
PHP的變量只須要使用$符號開頭,直接賦值就能使用,徹底不須要聲明。
如
$a = 123;
$str1 = "HelloWorld";
$str2 = 'demo1';
$a = $str2;
複製代碼
而其中的字符串類型也比較有特色,若是見過PHP代碼的童鞋常常會看到有的時候用雙引號,有的時候用單引號。
那麼他們有什麼區別呢?
其實若是僅僅是使用的話是沒有什麼區別的,惟一的區別就在於使用雙引號的時候,PHP會去解析其中的變量。
什麼意思呢?咱們來舉個栗子:
$str = "demo";
$a = 'qwe$str';
echo $a; // qwe$str
$b = "qwe$str";
echo $b; // qwedemo
複製代碼
PHP會將雙引號字符串中的$str變量解析成demo。
另外一個比較重要的點就是PHP中的字符串鏈接符。
很多有其餘語言基礎的PHP初學者常常會把PHP字符串鏈接寫成:
$str = "Hello"+"World";
複製代碼
是否是看上去沒問題?這樣運行起來但是會報錯的。
在PHP中,鏈接符是「.」,也就是要改爲:
$str = "Hello"."World";
複製代碼
這個坑在我剛學PHP時踩了太屢次了。
若是有學過其餘語言的童鞋,應該對數組這種數據結構很熟悉了。在不少語言中,數組都是要先聲明固定長度,而後纔可使用的。
在PHP中,數組其實也是一個變量,也是用$符號開頭的一個標識符,並不須要聲明長度,直接賦值就能用。
普通數組(索引數組):
$array = [1,2,3,4,5];
複製代碼
而插入元素咱們可使用$array[] = 'a';
或 $array['d']=>'door';
語法來爲數組添加元素。
如
$array[] = 6;
$array[] = 7;
$array['hello'] = 'world';
var_dump($array);
// [1,2,3,4,5,6,7,'hello'=>'world']
複製代碼
讀取的話,直接用下標就能讀取出來。
如
echo $array[1]; // 2
echo $array['hello']; // world
複製代碼
相應的,爲了知足不一樣的使用場景還發展出了列表(List)、隊列(Queue)、棧(Stack)、集合(Set)、字典(Map)。
在Java中,使用Map:
Map map=new HashMap();
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc");
複製代碼
在JS中,使用Map:
var m = new Map();
m.set(1, "black");
m.set(2, "red");
m.set("colors", 2);
複製代碼
那麼在PHP中須要怎麼定義這些數據結構呢?
答案是
沒有!!!
沒有!!!
沒有!!!
統統都沒有!!!
這時就有讀者提問了:「怎麼這PHP這麼菜,經常使用的數據結構都沒有實現?」
其實並非沒有實現,並且PHP已經把他們全部的功能集成到PHP的數組裏了。
那麼其餘數據結構就很容易了。
關聯數組(字典 Map):
$array = ['a'=>'apple','b'=>'banana'];
複製代碼
隊列(Queue):
經過內置函數array_shift()
就能夠彈出第一個元素。
棧(Stack):
經過內置函數array_pop()
就能夠彈出最後一個元素。
集合(Set):
經過內置函數array_rand()
就能夠隨機返回一個元素。
數組還有許多的內置函數,能夠進行交集、並集、求和、排序、甚至是多維排序等。
是否是看起來很膩害?之後會有一個章節專門講解PHP的各類騷操做,那時咱們就帶你們看一下什麼叫多維排序。什麼?爲何會有這麼多騷操做?還不是產品XX逼出來的。
PHP的數組是我學過的全部語言中最強大的,如今各位童鞋們有沒有以爲PHP是世界上最好的語言呢?
經過上述的講解,相信童鞋們已經知道PHP的變量和數組的用法了。
使用過其餘語言開發的童鞋,在代碼中確定會常常見到各類int、string、HashMap各類各樣的類型聲明。
但在PHP中就不存在這種狀況,所有都是統一使用$開頭的變量,各類變量都能進行自動的隱式轉換,開發者能更專一於本身的邏輯而不是複雜的語法。
在這裏留下一個懸念,PHP是怎麼作到各類類型都能相互比較,相互轉換的呢?這裏就涉及到了PHP底層的zval數據結構的實現了,咱們會在之後的文章中再深刻的回到這裏。
----- End -----
更多好文
請掃描下面二維碼
歡迎關注~