1.認識php
php是服務端嵌入到HTML中的腳本語言。
php的功能包括但不限于:
- 收集表單數據
- 生成動態網頁
- 字符串處理
- 動態輸出圖像
- 服務器端文件系統操作
- 編寫數據庫支持的網頁
- 會話跟蹤控制
- 處理XML文件
- 支持大量的網絡協議
- 服務器端的其它操作
2.php語言標記
php可以和HTML進行混編,在編譯的過程中,用 <?php 來表示php標識符的開始,用終止符?>來表現php模式的結束。如下:
<html>
<head>
<style></style>
</head>
<body>
<?php
echo "服務器的時間".data("Y-m-d H:i:s")."<br>";
?>
</body>
</html>
可以將php語言嵌入到擴展名為php的HTML文件中的任何地方,只需要在文件中寫入 <php? 內容 ?>起止符就行。
3.解讀開始和結束標記
當腳本中含有php代碼時,可以使用<?php ?>、<? ?>、<% %>來界定php代碼;在嵌入純變量時,還可以使用<?=variablename ?>這樣的形式。其中,<?php ?>和<script language="php"></script>總是可用的。另外兩種是短標記和asp風格標記,可以在php的配置文件php.ini中打開或關閉。
一般情況下,我們使用<?php ?>的寫法。
4.指定分隔符“分號”
與C、perl和java一樣,php語句分為兩種:
- 一種是結構定義語言,如流程控制、函數定義、類的定義等,在結構定義語句后面不能使用分號作為結束;
- 另一種是功能執行語句,如變量的聲明、內容的輸出、函數的調用等,這種語句也成為指令,php需要在每個指定后用分號結束。
一段php的結束標記?>隱含標識一個分號,所以一個pgp代碼段的最后可以不用分號結束。
5.程序注釋
注釋是用來說明程序的內容或碼農自己的備忘,不會被解釋并執行。格式如下:
單行注釋://或#
echo “注釋示例”//這里是一個單行注釋
多行注釋:/* */
/*這里是多行注釋第一行
這里是多行注釋第二行 */
echo “注釋示例”
除了以上注釋方法,還可以在php腳本中實用以/**開頭和*/結束的多行文檔注釋(PHPDocumentor)。
<?php
/**
向memcache中添加數據
@param string $tabName 需要緩存的數據表名
@param string $sql 使用sql作為memcache的key
@param mixed $data 需要緩存中數據
@return minxed 返回緩存中的數據
*/
function addCache($table,$sql,$data){
……
}
6.空白處理
一般來說,空白符(包括空格、Tab制表符、換行)在PHP中無關緊要,會被PHP引擎忽略。但應注意,空白符使用需以不引起代碼混淆、提高程序可讀性為目的。
7.變量
php中最基本的數據存儲單位就是變量和常量,它們可以存儲不同的數據類型。需要注意的是,php是一種弱類型檢查的語言,變量或常量的數據類型由上下文決定。
7.1變量的聲明
php的特性之一就是不需要在使用變量之前聲明變量,可以直接在賦值的同時在變量名前加$符聲明變量。
<? php
$a=100;//聲明一個變量$a并賦值為整形數據值100
$b="string";//聲明一個變量$b并賦值為字符串值"string"
$c=true;//聲明一個變量$c并賦值為布爾值true
$d=99.99//聲明一個變量$并賦值浮點型數據值99.99
?>
變量聲明以后具有一定的使用范圍,即作用域。
- 一般變量的作用域為聲明處到文件結束
- 函數內部的作用域為函數內
- 變量的作用域也包括當前頁面include和require引入的文件
- 如果使用Cookie或Session,變量還可以在多個頁面中使用
在變量的使用范圍內,可以用:
- unset()釋放指定變量。
- isset()檢測變量是否設置。注意如果變量被設置成NULL,將返回FALSE。
- empty()檢測變量是否為空。如果是非空或非零的值,將返回false。即“”、0、“0”、NULL、FALSE、array()、var $var都被認為是空的,返回TRUE。
7.2變量的命名
php的變量名嚴格區分大小寫。
但內置結構和關鍵字及用戶自定義的類名和函數名是不區分大小寫的,如echo、while、class,模糊成交額美好、function等都可以任意大小寫。
雖然php的關鍵字可以在php中作為變量名使用,不過容易混淆, 因此不推薦這樣做。
7.3 可變變量
一個變量的變量名可以動態的設置和使用。一個普通的變量通過聲明來設置,而一個可變變量則可以獲取一個普通變量的值作為自己的變量名。
<?php
$hi="hello";
$$hi="world";//將$hi的值hello作為變量名,即$hello=“world”
echo "$hi $hello";//輸出hello world
echo "$hi $($hi)"http://輸出hello world
?>
7.5變量的引用賦值
變量總是傳值賦值,也就是說,一個表達式的值賦值給另一個變量時,整個原始表達式的值被賦值到目標變量。這意味著,當一個變量的值賦予另一個變量時,改變其中一個變量的值,不會影響到另外一個變量。
php還提供了另一種變量賦值方式:引用賦值。這意味著新的變量將直接引用原始變量(相當于原始變量多了個別名叫新變量),改變任意一個變量都會影響到彼此的值。因為沒有執行復制操作,因此這種賦值方式更快,不過只有在密集循環或很大的數組或對對象賦值時才能注意到速度的提升。
使用引用賦值,只需要將一個&符加到將要賦值的變量前。
<?php
$foo="Bob";
$bar=&$foo;//引用賦值
echo $bar;//輸出"Bob"
$foo="123";
echo $bar;//輸出123
?>
需要注意的是,只有有名字的變量才能引用賦值。
另外,php的引用不同于C語言中的地址指針,不是直接指向變量的內存地址,只是將各自值關聯起來。基于這一點,使用unset()不會導致所有引用變量消失,僅僅是取消值關聯。
8.變量類型
8.1類型介紹
php中支持8種原始數據類型:
- 四種標準量型:boolen、integer、float(浮點型,又成double)、string
- 兩種符合類型:array、object
- 兩種特殊類型:resource、NULL
為確保代碼可讀性,這里還會介紹一些偽類型,如mixed、number、callback。
8.2布爾型(boolean)
boolean代表了TRUE或FALSE,即真或假。在php進行比較運算和邏輯運算時,返回值都為布爾類型,她是構成php邏輯控制的判斷依據。
在php中,布爾型不只有TRUE和FALSE兩個值,當運算符、函數或流程控制需要一個boolean參數時,任何類型的值都會自動轉換為布爾值,以下值被認為是FALSE,其它值(包括任何資源)都被認為是TRUE:
- 布爾值FALSE
- 整型0為假。注意,-1和任何非零值,都被任何是TRUE;
- 浮點型0,0;
- 空白字符串和字符串“0”;
- 沒有成員變量的數組;
- 沒有單元的對象(僅適用于php4);
- 特殊類型NULL(包括尚未設定的變量)。
8.3 整型(integer)
整型變量用于存儲整數,不僅可以表示整數或者復數,也不是只有十進制,還可以用十六進制或八進制。。使用八進制,數字前必須加上0;使用16進制,數字前必須加上0x。
整型數值有最大的使用范圍。長短與平臺有關,32位操作系統最值為正負20多億,具體為正負2 147 483 647。如果一個數值超過了integer的范圍,會被解釋為float。
8.4浮點型(float或double)
浮點數(也稱雙精度數或實數)是包含小數部分的數。通常用來表示整數無法表示的數,如金錢距離、速度等。浮點數的長度也是和平臺相關的,允許的范圍為1.7E-38~1.7E+38,精確到小數點后15位。
浮點數只是一種近似值,如果使用浮點數標識8,其結果內部其實類似7.99999999……所以不要相信浮點數結果精確到了最后一位,也不要比較兩個浮點數是否相等。
如果確實需要更高的精度,應該使用任意精度數學函數或gmp()函數。
8.5字符串(string)
php沒有給字符串的大小強加實現范圍,所以一個人的名字、一首詩、一篇文章都可以定義成一個字符串。
字符串可以用單引號、雙引號、定界符三種字面上的方法定義。這三種方法可以定義相同的字符串,但是在功能上有明顯差別。
8.5.1單引號
指定一個簡單字符串最直接的方法四用單引號 ' 括起來。
單引號中不能再包含單引號。
如果要在單引號中表示單引號需要用反斜線 \ 轉義。
如果單引號之前或字符串結果需要出現一個反斜線,則需要兩個反斜線表示。
在單引號中使用反斜線只能轉義單引號和轉義字符本身。
另外,在單引號字符串中出現的變量不會被變量的值替代。即php不會解析單引號中的變量,而是將變量名原樣輸出。
因此在定義簡單字符串時,使用單引號效率會比較高,因為php解析時不會花費一些處理字符轉義和解析變量上的開銷,沒有特殊需求的情況下,應使用單引號定義字符串。
8.5.2雙引號
使用雙括號 " 定義字符串時,可以使用更多特殊字符的轉義序列。
另外,雙引號字符中的變量名會被變量值代替,即可以解析雙引號中的包含變量。它提供了解析變量、數組值或對象的方法。
8.5.3定界符
另一種給字符串定界的方法是使用定界符<<<。應該在<<<之后提供一個標識符開始,然后是包含的字符串,最后是同樣的標識符結束字符串。結束標識符必須從行的第一列開始,并且后面不能包含其它任何字符,空格和空白制表符都不行。同時,定界符使用的標識符也必須尊混PHP中其它任何標簽的命名規則:只能包含字幕、數字、下劃線,而且必須以下劃線或非數字字母開始。
<?php
//以標識符EOT開始和結束定義的一個字符串,也可以使用其它合法標識符。
$string=<<<EOT
這里可用于輸出大段字符串。
定界符中同樣可以輸出變量。
EOT;
echo $string;
?>
8.6數組
數組是php中一種重要的復合數據類型。前面介紹的標準數據類型只能存入一個數據,而數組可以存放多個數據,并且可以存放任何類型的數數。php中的數組實際上是一張有序圖。圖是一種把values映射到keys的類型,此類型在很多方面進行了優化,因此可以把它當成真正的數組或列表(矢量)、散列圖、字典、集合、棧、隊列來使用,以及更多的可能性。
因為可以用另一個PHP數組作為值,也可以很容易的模擬樹。這里僅做簡要說明,之后的內容里會詳細介紹。
PHP中可以使用多種方法構造一個數組,這里使用array()方法來新建一個數組,它接受一定數量的用逗號分隔的key=》value參數樹。
<?php
/*格式
array(
key1=>value1,
key2=>value2
……
)
key可以使inter或string
value可以是任何值
*/
$arr=arr("name"=>"liunan",18=>true);//構造一個數組
echo $arr[18]//通過下標訪問數組單個數據
?>
8.7 對象(Object)
對象和數組都是一種符合數據類型,但對象是一種更高級的數據類型。一個對象類型的變量,是由一組屬性值和一組方法構成的。后面做詳細介紹,此處簡要說明。
要初始化一個對象,用new語句將對象實例化到一個變量中:
<?php
class Person{ //使用class關鍵字定義類
var $name; //定義一個成員屬性$name
function say(){ //定義一個方法say()
echo"Doing foo.";
}
}
$p=new Person; //實例化一個Person放在$p中
$p->name="Tom";
$p->say();
?>
8.8 資源類型(resource)
資源是一種特殊類型的變量,保存了到外部資源的一個引用。資源是通過專門函數來建立和使用的。使用資源類型變量保存有為打開文件、數據庫連接、圖形畫布區域等的特殊句柄,并由程序員創建、使用和釋放。任何資源在不需要時都應該被及時釋放,如果程序員忘記了釋放資源,系統將自動啟動垃圾回收機制,以避免內存消耗殆盡。因此,很少需要用某些free-result函數來手工釋放內存。
在下面的示例中,使用相應的函數創建不同的資源變量。如果創建成功,則返回資源引用賦給變量;如果失敗則返回false,所以很容易判斷資源是否創建成功。
<?php
//使用fopen()打開本目錄下的info.txt文件,返回文件資源給變量$file_handle
$file_handle=fopen("info.txt","w");
//使用opendir()打開windows系統下的C:\\WINDOWS\Fonts目錄,返回目錄資源
$dir_handle=opendir("C:\\WINDOWS\Fonts");
//使用mysql_connect()函數連接本機的MySQL管理系統,返回MySQL的連接資源
$link_mysql=mysql_connect("localhost","root","123456");
//利用imagecreate()函數創建一個100X50像素的畫板,返回圖像資源
$im_handle=imagecreate(100,50);
?>
8.9 NULL類型
特殊的NULL值標識一個變量沒有值,NULL類型唯一可能的值就是NULL。NULL不表示空格,也不表示零,也不是空字符串,而是表示一個變量的值為空。NULL不區分大小寫,在下列情況下一個變量被認為是NULL:
- 將變量直接賦值為NULL
- 聲明的變量尚未賦值
- 被unset()函數銷毀的變量
8.10 偽類型
偽類型并不是PHP語言的基本數據類型,只是因為PHP是弱類型語言,所以在一些函數中,一個參數可以接受多種類型的數據,還可以接受其他函數作為回調函數使用。常用的偽類型有:
- mixed:說明一個函數可以接受多種不同的(但不必須是所有的)類型。例如gettype()可以接受所有的php類型,str_replace可以接受賜福穿和數組。
- number:說明一個函數可以使integer或float
- callback:不僅可以是一個函數,也可以是一個對象的方法,靜態類的方法也可以。一個php函數用函數名字符串來傳遞,可以傳遞任何內置的或者用戶自定義的函數,除了array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()。
9.數據類型之間的相互轉換
類型轉換是指將變量或值從一種數據類型轉換成其它數據類型。轉換的方法有兩種:一種是自動轉換,另一種是強制轉換。
在PHP中可以根據變量的使用環境自動將其轉換為最合適的數據類型,也可以根據需要強制轉換為用戶指定的類型。
因為PHP在變量定義中不需要(或者說不支持)明示的類型定義,變量類型由該變量的上下文決定,所以在PHP中如果沒有明確的要求類型轉換,都可以使用默認的類型自動轉換。
9.1自動類型轉換
每一個數據都有它的類型,具有相同類型的數據才能彼此操作。在PHP中,自動轉換通常發生在不同數據類型的變量進行混合運算時。當參與運算的量類型不同,則自動轉換后再進行運算。通常只有四種標量類型(integer、float、string、boolean)才能使用自動類型轉換。注意,這并沒有改變這些運算數本身的類型,改變的僅是這些運算數如何被求值。
自動類型轉換雖然是由系統自動完成的,但在混合運算時,自動轉換要遵循轉換按數據長度增加的方向進行,以保證精度不降低。所以轉換規則如下:
- 有布爾值參與運算時,TRUE將轉換為整型1、FALSE將轉換為整型0后再參與運算。
- 有NULL值參與運算時,NULL值將轉換為整型0再參與運算。
- 有integer型和float型的值參與運算時,先把integer型變量轉換為float再參與運算。
- 有字符串和數值型(integer、float)數據參與運算時,字符串先轉換為數字,再參與運算。轉換后的數字是從字符串開始的數值型字符串,如果在字符串開始的數值型字符串不帶小數點,則轉換為integer類型的數字;如果帶有小數點,則轉換為float類型的數字。例如,字符串“123abc”轉換為123,字符串“123.45abc”轉換為123.45,字符串“abc”轉換為整數0。
9.2 強制類型轉換
PHP的強制類型轉換有兩種,可以在需要轉換的變量前加上用括號括起來的目標類型,也可以額用具體的轉換函數,即intval(),floatval()和strval(),或是使用settype函數轉換類型。
<?php
$exp=10;
$exp2=(boolean)$exp;
$exp3=strval($exp);
?>
在括號中允許的強制類型轉換如下。
- (int),(integer):轉換成整型。
- (bool),(boolean):轉換成布爾型。
- (float),(double),(real):轉換成浮點數。
- (string):準換成字符串。
- (array):轉換成數組。
- (object):轉換成對象。
自PHP5起,如果視圖將對象轉換為浮點數,將會發出一條E_NOTICE錯誤。
9.3 類型轉換細節
整數轉換為浮點型,由于浮點型的精度范圍遠大于整型,所以轉換后的精度不會改變。
浮點型轉換為整型,將自動舍棄小數部分,只保留整數部分。如果一個浮點數超過整型數字的有效范圍,其結果將是不確定的。整型的最大值約為2.147e9。
當字符串轉換為數字時,轉換后的數字時從字符串開始部分的數值型字符串,數值型字符串包括用科學計數法表示的數字。
NULL值轉換為字符串,為空字符串“ ”。
9.4 變量的測試函數
一般情況下,我們實用var_dump()來查看某個表達式的值和類型。
gettype()函數可以用來確定變量的類型并返回一個包含變量類型名稱的字符串。但是要查看某個類型,不要用gettype()函數,而要用is_type()函數,它是PHP提供的一些特定類型的測試函數之一。每個函數都使用一個變量作為參數,并返回true或者false。這些函數如下:
- is_bool():判斷是否是布爾型
- is_int()、is_integer()和is_long():判斷是否是整型
- is_float()、is_double()和is_real():判斷是否是浮點數
- is_string():判斷是否是字符串
- is_array():判斷是否是數組
- is_object():判斷是否是對象
- is_resource():判斷是否是資源類型
- is_null():判斷是否為空
- is_scalar():判斷是否是標量,也可以使一個整數、浮點數、布爾型或字符串
- is_numeric():判斷是否是任何類型的數字或字符串
- is_callable():判斷是否是有效的函數名
10 常量
常量一般用于數據計算中固定的數值。在腳本執行期間,常量一旦被定義,就不能再改變或者取消定義。
常量的作用域是全局的,可以在腳本的任何地方聲明和訪問到常量。
另外,雖然變量和常量都是PHP的存儲單元,但常量聲明的類型只能是標量數據(boolean、integer、float和string)。
對于整型這種簡單數據類型常量來說,要比聲明變量效率高一點,但是字符串這種復雜數據類型的話就差不多了。
常量在php中非常多見,不僅可以自定義常量使用,更主要的是幾乎每個PHP擴展中都默認提供了大量可供使用的常量,而且PHP也提供了一些比較實用的魔術常量。
10.1 常量的定義和使用
聲明常量的聲明變量的方式不同,在PHP中是通過define()函數來定義常量的。常量的命名與變量相似,也要遵循PHP標識符的命名規則。另外,常量同樣大小寫敏感,按照慣例常量名稱總是大寫的,但是不能加$符。define()函數的格式如下:
boolean define(string name,mixed value,[bool case_insensitive])
此函數的第一個參數為字符串類型的常量名,第二個參數為常量值或表達式,第三個case_insensitive是可選參數,如果設為TRUE,則常數將會定義成不區分大小寫,默認是區分大小寫的。
如果只想檢查是否定義了某個常量,則用defined()函數。示例如下:
<?php
define("EXP",100);
define("EXP2",true);
define("EXP3","hi world");
define("EXP3","hi world",true);
echo exp3; //輸出
echo EXP3;
if (defined("EXP")){
}
?>
注意:如果使用一個沒有聲明的常量,則常量名稱會被解析為一個普通字符串,但會比直接使用字符串慢近8倍左右,所以聲明字符串時一定要加上單引號或雙引號。
10.2 常量和變量
常量與變量都是PHP的存儲單元,但名稱、作用域及聲明方式都有所不同。以下是常量和變量的不同點。
- 常量前面沒有美元符號$。
- 常量只能用define()函數定義,而不能通過賦值語句定義。
- 常量可以不用理會變量范圍的規則而在任何地方定義和訪問。
- 常量一旦定義就不能被重新定義或取消定義,直到腳本結束自動釋放。
- 常量的值只能是標量(boolean、integer、float、string這四種類型之一)。
10.3 系統中的預定義常量
PHP中除了自己定義常量外,還預定義了一系列系統常量,可以在程序中直接使用。
不過很多常量都是不同的擴展庫定義的,只有加載了這些擴展庫時才會出現。下表是常見的一些預定義常量:
10.4 PHP中的魔術常量
PHP中還有5個常量會根據他們使用的位置而改變,這樣的常量在PHP中被稱為“魔術常量”。另外,這些特殊常量不分大小寫,PHP中常見的幾個魔術常量如下:
使用如下:
<?php
echo "PHP程序當前文件路徑名:".FILE;
echo "<br >PHP程序當前行數:".LINE;
echo "<br >當前PHP程序的版本:".PHP_VERSION;
echo "<br >當前操作系統:".PHP_OS;
?>
11 PHP中的運算符
運算符和變量是每種計算機語法中必須有的一部分,是一個命令解釋器對一個或多個操作符執行某種運算的符號,也稱操作符。
可以根據操作數的個數分為一元運算符、二元運算符、三元運算符。一元運算符只運算一個數,例如!(取反運算符)或++(加一運算符)。二元運算符可以運算兩個值,PHP支持的大多數運算符都是這種二元運算符。而三元運算符只有一個(?:)。
如果按運算符的不同功能去分類,可以分為算數運算符、字符串運算符、賦值運算符、比較運算符、邏輯運算符、位運算符和其它運算符。
11.1 算術運算符
算術運算符包括常見的加、減、乘、除、取余等。使用方法與數學運算符一樣。
這里重點介紹一下“%”、“++”和“--”三個運算符。
求模運算也稱取余運算,在PHP語言中求模時,會將兩邊的操作數轉換為整型,然后求余數。在程序開發時使用求模運算通常有兩個目的:第一個目的是做整除運算,如計算閏年時,能被4整除不能被100整除,或者能被400整除的就是閏年;另一個目的是讓輸入數不超過某個數的范圍。例如,讓一個隨機數在10以內,就可以讓這個隨機數和10取余。
在編程中,最常見的運算時對一個變量進行加1或減1的操作。可以使用+=或-=。另外,PHP也提供了遞增和遞減運算符,即 ++ 和 - - ,常用于循環之中。
++ 和 - - 都可以在變量的前面使用,也可以在變量的后面使用,這樣就決定了變量時先運算后賦值,還是先賦值后運算。
$a++,等同于$a=$a+1,先運算后賦值;
如下例:
<?php
$a=10;
$b=$a++;//先執行$b=$a,此時b=10,然后執行$b+1,b=11
?>
++$a,等同于$a=$a+1,先賦值后運算;
<?php
$a=10;
$b=++$a;//先執行$a=$a+1,此時a=11,然后執行$b=$a,b=11
?>
記憶方法:$a++中,a在前先賦值,a在后后賦值。
另外,在處理字符變量的元數運算符時,沿用了Perl的習慣,而非C的。如在Perl中,‘Z’+1將得到‘AA’;而在C中將得到'['(ord('Z'==90,ord('['==91)。
字符變量只能遞增,不能遞減,并且只支持純字母(az和AZ)。
11.2 字符串運算符
PHP中字符串運算符只有一個,是英文的句號(.),用于連接字符串。字符串與任何標量數據類型連接,得到的都是引得字符串。
<?php
$a=10;
$b='我的';
$c='年齡為';
$d=$b.$c.$a;
echo $d; //輸出結果:我的年齡為10
?>
11.3 賦值運算符
賦值運算符也是一個二元運算符,之前接觸過最基本的賦值運算符=,用于將右邊的值賦給左邊的變量。另外,還有一些復合賦值運算符。
用例如下;
<?php
$x=10;
echo $x; // 輸出10
$y=20;
$y += 100;
echo $y; // 輸出120
$a=$b=$c=5; //連續賦值
?>
11.4 比較運算符
比較運算符也稱關系運算符、條件運算符,是一種常用的二元運算符。比較的結果只能是布爾值TRUE或者FALSE。
比較運算符常用語if條件和while循環等流程控制語句中,用于判斷程序執行的條件。
==和===的區別在于是否比較數據類型。
11.5 邏輯運算符
邏輯運算符用來判斷真假,返回值為布爾值TRUE或FALSE。
與或非和異或。
11.6 位運算符
任何信息在計算機中都是以二進制數的形式保存的,位運算符允許對整型數中指定的位進行置換。
如果左右參數都是字符串,則位運算符將操作字符的ASCII值,浮點數也會自動轉換為整型再進行與位運算。
位運算說穿了,就是直接對整數在內存中的二進制位進行操作。比如,and運算本來是一個邏輯運算符,但整數與整數之間也可以進行and運算。舉個例子,6的二進制是110,11的二進制是1011,那么6 and 11的結果就是2,它是二進制對應位進行邏輯運算的結果(0表示False,1表示True,空位都當0處理)。
位運算雖然用于對操作數中的每個二進制位進行運算,可以完成一些底層的系統程序設計,但是在程序開發時很少用到,因為使用PHP程序很少參與到計算機底層的技術。
關于位運算的詳情見官方文檔:
http://www.php.net/manual/zh/language.operators.bitwise.php
11.7 其它運算符
除了以上運算符外,還有一些其它運算符用于實現特定功能:
三元運算符 ?:,可以提供簡單的邏輯判斷。示例:
<?php
$a<$b?$c=1:$c=0;
//相當于下列語句
if($a<$b){
$c=1;
}
else{
$c=0;
}
?>
執行運算符,反引號(``)。PHP將嘗試將反引號中的內容作為操作系統命令來執行,并將其輸出信息返回。
效果相當于函數shell_exec()。
錯誤控制運算符 @。將其放置在一個表達式之前,該表達式可能產生出的任何警告信息都會被忽略。
數組下標指定符號=>。通過此符號指定數組的鍵與值。
對象成員訪問符號->。訪問對象中的成員屬性或成員方法。
instanceof。類型運算符,用來測定一個給定的對象是否來自指定的對象類。
11.8 運算符優先級
所謂的優先級,是指在表達式中哪一個運算符應該先計算。
如果運算符優先級相同,則使用從左到右的左聯順序。
優先級相同的運算符,此時他們的家結合方法決定求值順序。
一般不強記優先級,通常使用小括號()改變表達式的優先級更加易懂。
11.9 表達式
在PGP中,幾乎所編寫的任何代碼都可以看做一個表達式,通常是變量、常量和運算符號的組合。簡單卻精確的定義一個表達式的方式就是“任何有值的東西”。
- 最基本的表達式形式是常量和變量,例如賦值語句$a=5。
- 稍微復雜的表達式就是函數,例如$a=foo()。
- 算術運算符中的前、后遞增遞減也是,例如$a++、$--a。
- 常用的表達式類型是“比較表達式”,例如$a>5、$a<=5。
- 組合的運算賦值也是常用的表達式,例如$a+=5。
- 三元運算符(?:)也是一種表達式,例如$v=($a?$b=5:$c=10)。