| 首頁 | 討論區 | 我的食譜|


基礎語法

本章關鍵字

基礎語法

我們先來來看一個簡單的範例

例1

1. <?php
2.      $var = true;
3.      // 輸出 
4.      if ( $var == true ) 
5.      {
6.          echo "輸出1";
7.      }
  1. Open Tag
  2. $var = true; $var 是一個變數, = 是告訴 PHP 把右邊的 true 設給左手邊的 $var,所以 $var 之後的內容就是 true了。
  3. // 是備註,是給人看的,不是給程式看的
  4. if ( $var == true ) 這是一種判斷,詢問 PHP $var 的內容是不是 true? 記得要用小括號( ... ) 把這個判斷括起來。
  5. { if 的結果如果是對的話,那麼就會執行 { ... } 的內容。
  6. echo "輸出"; 在輸出裡輸出“輸出”,請注意,行尾有一個 ; 號。
  7. } 是區塊的結尾。

運算子

例1

<?php
echo 1+2*3/4;

+ - * / 就是我們平常使用的加減乘除,這就是所謂的運算子,當然運字算不止這四種。

運算子優先順序

運算子有所謂的方向、優先順序,所謂的優先順序很簡單,就像小時候學數學,先乘除後加減的意思是相同的,所以依照場景跟直覺,十之八九會是正確的。

而方向所謂的由左到右或由右至左也是一樣的道理,比如設值運算子(=)

<?php
$var = true;

設值運算子是把值放進變數裡,所以我們把右邊的值放進左邊的變量,方向就是由右向左。

不用試圖去背誦,當使用的時候自然就會知道了

下表是由 PHP 官方截取下來的運算子列表,包含筆者也不會全部都用到。

AssociativityOperatorsAdditional Information
non-associativeclonenewclone and new
left[array()
right**arithmetic
right++--~(int)(float)(string)(array)(object)(bool)@types and increment/decrement
non-associativeinstanceoftypes
right!logical
left*/%arithmetic
left+-.arithmetic and string
left<<>>bitwise
non-associative<<=>>=comparison
non-associative==!====!==<><=>comparison
left&bitwise and references
left^bitwise
left|bitwise
left&&logical
left||logical
right??comparison
left? :ternary
right=+=-=*=**=/=.= %=&=|=^=<<=>>= assignment
leftandlogical
leftxorlogical
leftorlogical

區塊

上面的例子,我們要先來看插號,我們目前用到了二種,一種是小括號 (...) ,一種是大括號 {...}。

括號 ( ... ) ,{ ... }

小括號通常用在判斷式裡,就像我們小時候學數學一樣,我們也可以利用小括號來決定優先權

<?php
if ( ( 1 + 1 == 2 ) and ( 2 + 2 == 4 ) ) echo '是真的!';

我們上面這段程式,請注意中間的 and ,if 緊接著有一對 ( ... ) ,在包著二個 ( ... ),并且在中間有一個 and。 這段程式碼指的就是 1 + 1 = 2 跟 2 + 2 = 4 都要成立的情況下,才輸出“是真的!”。

如果沒有用 ( ... ) 把 1 + 1 = 2 跟 2 + 2 = 4 包起來,那 PHP 就會認不出你想的要是分別去確認 1 + 1跟 2+2了,

小括號用在判斷式裡,大括號則是用在一段程式碼裡,所以從上面的例子,我們可以看到例1的 echo 是被包在 { ... } 裡的。

行結尾 分號 ;

PHP 對斷行并不敏感,每一行程式碼均需在結尾的時候使用 ; 才會結束。

意思就是,我們的例一也可以改成這樣子寫

1. <?php $var = true;if ( $var == true ) {echo "輸出1";} ?>

這二種寫法,對 PHP 是相同的沒有區別的。

每一行程式的結尾,都要利用分號來告訴 PHP 是一行的結束,括號除外。

各類運算

加減乘除

運算子其實跟我們平常學的加減乘除是一樣的意思,只是有些比較特別的。

一般我們常用的 + , - 當然是沒問題的,但是沒有乘號號跟除號啊!

在 PHP,或說在絕對部份的語言裡,都是用 * 做乘號,用 / 做除號,用 % 做餘數。

運算子的運作方向及優先權

運算子聽起來很高大上,其實就跟小時候學數學的加減乘除是一模一樣的意思。

1 + 2 * 3 = 7

因為 (乘號)的優先權比 + 號高,所以我們要先計算 2 3 ,計算完在算 1 + 6 ,所以答案是 7

下表是從 PHP 官方抓下來的,運算子的優先權就是這麼一回事,而 PHP 的運算子頗多,不過其實很簡單,跟據筆者的名言,一直會用的你就記得起來,你一直不會用的你就肯定會忘記,所以只要大致上看過,有印像,當你必需用的時候,你自然就會記起來了。

所以我們從下表對照起來, 號在 + 號的上面,所以會先處理 號,在處理

編號 方向 運算子 相關資訊
1 non-associative clone new clone and new
2 [ array()
3 ** arithmetic
4 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ types and increment/decrement
5 instanceof types
6 ! logical
7 * / % arithmetic
8 + - . arithmetic and string
9 << >> bitwise
10 < <= > >= comparison
11 == != === !== <> comparison
12 & bitwise and references
13 ^ bitwise
14 bitwise
15 && logical
16 || logical
17 ? : ternary
18 = += -= *= **\= /= .= %= &= = ^= <<= >>= => assignment
19 and logical
20 xor logical
21 or logical
22 , many uses

而優先權,照上表來講,就是往上面優先權愈高,愈下面優先權愈低。 而還有一個所謂的“方向”,指的就是從左往右,還是由右往左,這樣子講很模湖,我們來舉一個實例。

<?php
$var = 1 - 2 + 3 * 4 / 5 ;
<?php
$var = 1 - 2 + (3 * 4 / 5) ;

當優先順序相同的時候,就優先處理左手邊的資料。

有注意到運算子的方向性嗎?加減乘除,都是向左結合,而 = 是向右結合。

向右結合指的就是,在把右手邊的放到左手邊。

照這個算式,計算的順 序就是。

  1. 3 * 4 = 12
  2. 12 / 5 = 2.4
  3. 1 - 2 = -1
  4. -1 + 2.4
  5. 1.4

最後遇到 = 是設值運算子

<?php
$var = 1.4

由於 = 的優先順序比其它的都低,所以最後才被處理,所以接下來 $var 裡裝的就是 1.4了。

比較

PHP 的比較有分為

PHP 由於屬於弱型態的語言,所以比較的方式分為一般的比較跟絕對比較,所謂的一般比較,指的就是不管類型,只管內容。

<?php
echo 123 == '123'; // 輸出 1 ,即為布林的 true
echo 123 === '123; // 沒有輸出,即為布林的 false

我們先看 123 跟 '123',當沒有用引號的時候, 123 會被視為數字,用引號括起的部份,會被視為文字,使用 == 的時候,系統不會管你二邊的類形是不是一樣,因為內容都裝著 123,所以視為相等,出輸也就是 true;而使用 \=\=\= 的時時候,由於連類型也必需是相同的,所以就輸出 false。

既然能比較相等,就也要能比較不相等,不相等一樣分為一般跟絕對,用法跟相等是一樣的,只不過結果反過來而己。