1.認(rèn)識(shí)php
php是服務(wù)端嵌入到HTML中的腳本語(yǔ)言挖诸。
php的功能包括但不限于:
- 收集表單數(shù)據(jù)
- 生成動(dòng)態(tài)網(wǎng)頁(yè)
- 字符串處理
- 動(dòng)態(tài)輸出圖像
- 服務(wù)器端文件系統(tǒng)操作
- 編寫數(shù)據(jù)庫(kù)支持的網(wǎng)頁(yè)
- 會(huì)話跟蹤控制
- 處理XML文件
- 支持大量的網(wǎng)絡(luò)協(xié)議
- 服務(wù)器端的其它操作
2.php語(yǔ)言標(biāo)記
php可以和HTML進(jìn)行混編该窗,在編譯的過程中览露,用 <?php 來表示php標(biāo)識(shí)符的開始驹止,用終止符?>來表現(xiàn)php模式的結(jié)束斋扰。如下:
<html>
<head>
<style></style>
</head>
<body>
<?php
echo "服務(wù)器的時(shí)間".data("Y-m-d H:i:s")."<br>";
?>
</body>
</html>
可以將php語(yǔ)言嵌入到擴(kuò)展名為php的HTML文件中的任何地方鞋怀,只需要在文件中寫入 <php? 內(nèi)容 ?>起止符就行屋休。
3.解讀開始和結(jié)束標(biāo)記
當(dāng)腳本中含有php代碼時(shí)杂靶,可以使用<?php ?>梆惯、<? ?>、<% %>來界定php代碼吗垮;在嵌入純變量時(shí)垛吗,還可以使用<?=variablename ?>這樣的形式。其中烁登,<?php ?>和<script language="php"></script>總是可用的职烧。另外兩種是短標(biāo)記和asp風(fēng)格標(biāo)記,可以在php的配置文件php.ini中打開或關(guān)閉。
一般情況下蚀之,我們使用<?php ?>的寫法蝗敢。
4.指定分隔符“分號(hào)”
與C、perl和java一樣足删,php語(yǔ)句分為兩種:
- 一種是結(jié)構(gòu)定義語(yǔ)言寿谴,如流程控制、函數(shù)定義失受、類的定義等讶泰,在結(jié)構(gòu)定義語(yǔ)句后面不能使用分號(hào)作為結(jié)束;
- 另一種是功能執(zhí)行語(yǔ)句拂到,如變量的聲明痪署、內(nèi)容的輸出、函數(shù)的調(diào)用等兄旬,這種語(yǔ)句也成為指令狼犯,php需要在每個(gè)指定后用分號(hào)結(jié)束。
一段php的結(jié)束標(biāo)記?>隱含標(biāo)識(shí)一個(gè)分號(hào)领铐,所以一個(gè)pgp代碼段的最后可以不用分號(hào)結(jié)束悯森。
5.程序注釋
注釋是用來說明程序的內(nèi)容或碼農(nóng)自己的備忘,不會(huì)被解釋并執(zhí)行绪撵。格式如下:
單行注釋://或#
echo “注釋示例”//這里是一個(gè)單行注釋
多行注釋:/* */
/*這里是多行注釋第一行
這里是多行注釋第二行 */
echo “注釋示例”
除了以上注釋方法瓢姻,還可以在php腳本中實(shí)用以/**開頭和*/結(jié)束的多行文檔注釋(PHPDocumentor)。
<?php
/**
向memcache中添加數(shù)據(jù)
@param string $tabName 需要緩存的數(shù)據(jù)表名
@param string $sql 使用sql作為memcache的key
@param mixed $data 需要緩存中數(shù)據(jù)
@return minxed 返回緩存中的數(shù)據(jù)
*/
function addCache($table,$sql,$data){
……
}
6.空白處理
一般來說音诈,空白符(包括空格幻碱、Tab制表符、換行)在PHP中無關(guān)緊要细溅,會(huì)被PHP引擎忽略褥傍。但應(yīng)注意虚吟,空白符使用需以不引起代碼混淆系吩、提高程序可讀性為目的。
7.變量
php中最基本的數(shù)據(jù)存儲(chǔ)單位就是變量和常量好芭,它們可以存儲(chǔ)不同的數(shù)據(jù)類型承疲。需要注意的是邻耕,php是一種弱類型檢查的語(yǔ)言燕鸽,變量或常量的數(shù)據(jù)類型由上下文決定。
7.1變量的聲明
php的特性之一就是不需要在使用變量之前聲明變量御滩,可以直接在賦值的同時(shí)在變量名前加$符聲明變量鸥拧。
<? php
$a=100;//聲明一個(gè)變量$a并賦值為整形數(shù)據(jù)值100
$b="string";//聲明一個(gè)變量$b并賦值為字符串值"string"
$c=true;//聲明一個(gè)變量$c并賦值為布爾值true
$d=99.99//聲明一個(gè)變量$并賦值浮點(diǎn)型數(shù)據(jù)值99.99
?>
變量聲明以后具有一定的使用范圍削解,即作用域。
- 一般變量的作用域?yàn)槁暶魈幍轿募Y(jié)束
- 函數(shù)內(nèi)部的作用域?yàn)楹瘮?shù)內(nèi)
- 變量的作用域也包括當(dāng)前頁(yè)面include和require引入的文件
- 如果使用Cookie或Session氛驮,變量還可以在多個(gè)頁(yè)面中使用
在變量的使用范圍內(nèi)腕柜,可以用:
- unset()釋放指定變量盏缤。
- isset()檢測(cè)變量是否設(shè)置唉铜。注意如果變量被設(shè)置成NULL律杠,將返回FALSE俩功。
- empty()檢測(cè)變量是否為空诡蜓。如果是非空或非零的值蔓罚,將返回false豺谈。即“”茬末、0丽惭、“0”责掏、NULL湃望、FALSE、array()担映、var $var都被認(rèn)為是空的另萤,返回TRUE四敞。
7.2變量的命名
php的變量名嚴(yán)格區(qū)分大小寫忿危。
但內(nèi)置結(jié)構(gòu)和關(guān)鍵字及用戶自定義的類名和函數(shù)名是不區(qū)分大小寫的铺厨,如echo解滓、while洼裤、class腮鞍,模糊成交額美好移国、function等都可以任意大小寫迹缀。
雖然php的關(guān)鍵字可以在php中作為變量名使用祝懂,不過容易混淆嫂易, 因此不推薦這樣做怜械。
7.3 可變變量
一個(gè)變量的變量名可以動(dòng)態(tài)的設(shè)置和使用缕允。一個(gè)普通的變量通過聲明來設(shè)置障本,而一個(gè)可變變量則可以獲取一個(gè)普通變量的值作為自己的變量名驾霜。
<?php
$hi="hello";
$$hi="world"粪糙;//將$hi的值hello作為變量名蓉冈,即$hello=“world”
echo "$hi $hello";//輸出hello world
echo "$hi $($hi)"http://輸出hello world
?>
7.5變量的引用賦值
變量總是傳值賦值寞酿,也就是說伐弹,一個(gè)表達(dá)式的值賦值給另一個(gè)變量時(shí)掸茅,整個(gè)原始表達(dá)式的值被賦值到目標(biāo)變量昧狮。這意味著逗鸣,當(dāng)一個(gè)變量的值賦予另一個(gè)變量時(shí)撒璧,改變其中一個(gè)變量的值卿樱,不會(huì)影響到另外一個(gè)變量繁调。
php還提供了另一種變量賦值方式:引用賦值蹄胰。這意味著新的變量將直接引用原始變量(相當(dāng)于原始變量多了個(gè)別名叫新變量)浩蓉,改變?nèi)我庖粋€(gè)變量都會(huì)影響到彼此的值捻艳。因?yàn)闆]有執(zhí)行復(fù)制操作讯泣,因此這種賦值方式更快好渠,不過只有在密集循環(huán)或很大的數(shù)組或?qū)?duì)象賦值時(shí)才能注意到速度的提升拳锚。
使用引用賦值霍掺,只需要將一個(gè)&符加到將要賦值的變量前杆烁。
<?php
$foo="Bob";
$bar=&$foo兔魂;//引用賦值
echo $bar;//輸出"Bob"
$foo="123";
echo $bar;//輸出123
?>
需要注意的是,只有有名字的變量才能引用賦值智玻。
另外吊奢,php的引用不同于C語(yǔ)言中的地址指針页滚,不是直接指向變量的內(nèi)存地址逻谦,只是將各自值關(guān)聯(lián)起來邦马∽探基于這一點(diǎn)父丰,使用unset()不會(huì)導(dǎo)致所有引用變量消失蛾扇,僅僅是取消值關(guān)聯(lián)镀首。
8.變量類型
8.1類型介紹
php中支持8種原始數(shù)據(jù)類型:
- 四種標(biāo)準(zhǔn)量型:boolen更哄、integer成翩、float(浮點(diǎn)型,又成double)庸论、string
- 兩種符合類型:array、object
- 兩種特殊類型:resource簇秒、NULL
為確保代碼可讀性趋观,這里還會(huì)介紹一些偽類型皱坛,如mixed掐场、number熊户、callback嚷堡。
8.2布爾型(boolean)
boolean代表了TRUE或FALSE蝌戒,即真或假。在php進(jìn)行比較運(yùn)算和邏輯運(yùn)算時(shí)粹淋,返回值都為布爾類型桃移,她是構(gòu)成php邏輯控制的判斷依據(jù)借杰。
在php中,布爾型不只有TRUE和FALSE兩個(gè)值绞惦,當(dāng)運(yùn)算符济蝉、函數(shù)或流程控制需要一個(gè)boolean參數(shù)時(shí)王滤,任何類型的值都會(huì)自動(dòng)轉(zhuǎn)換為布爾值第喳,以下值被認(rèn)為是FALSE曲饱,其它值(包括任何資源)都被認(rèn)為是TRUE:
- 布爾值FALSE
- 整型0為假渔工。注意,-1和任何非零值旺韭,都被任何是TRUE区端;
- 浮點(diǎn)型0,0沥邻;
- 空白字符串和字符串“0”唐全;
- 沒有成員變量的數(shù)組邮利;
- 沒有單元的對(duì)象(僅適用于php4);
- 特殊類型NULL(包括尚未設(shè)定的變量)祷愉。
8.3 整型(integer)
整型變量用于存儲(chǔ)整數(shù)二鳄,不僅可以表示整數(shù)或者復(fù)數(shù),也不是只有十進(jìn)制欺殿,還可以用十六進(jìn)制或八進(jìn)制脖苏。。使用八進(jìn)制亦歉,數(shù)字前必須加上0;使用16進(jìn)制赛蔫,數(shù)字前必須加上0x呵恢。
整型數(shù)值有最大的使用范圍。長(zhǎng)短與平臺(tái)有關(guān)晌姚,32位操作系統(tǒng)最值為正負(fù)20多億挥唠,具體為正負(fù)2 147 483 647。如果一個(gè)數(shù)值超過了integer的范圍唤锉,會(huì)被解釋為float株憾。
8.4浮點(diǎn)型(float或double)
浮點(diǎn)數(shù)(也稱雙精度數(shù)或?qū)崝?shù))是包含小數(shù)部分的數(shù)嗤瞎。通常用來表示整數(shù)無法表示的數(shù),如金錢距離掉瞳、速度等。浮點(diǎn)數(shù)的長(zhǎng)度也是和平臺(tái)相關(guān)的衡查,允許的范圍為1.7E-38~1.7E+38,精確到小數(shù)點(diǎn)后15位塌忽。
浮點(diǎn)數(shù)只是一種近似值,如果使用浮點(diǎn)數(shù)標(biāo)識(shí)8擦耀,其結(jié)果內(nèi)部其實(shí)類似7.99999999……所以不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也不要比較兩個(gè)浮點(diǎn)數(shù)是否相等吁系。
如果確實(shí)需要更高的精度汽纤,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或gmp()函數(shù)液茎。
8.5字符串(string)
php沒有給字符串的大小強(qiáng)加實(shí)現(xiàn)范圍滞造,所以一個(gè)人的名字挺狰、一首詩(shī)丰泊、一篇文章都可以定義成一個(gè)字符串。
字符串可以用單引號(hào)始绍、雙引號(hào)瞳购、定界符三種字面上的方法定義。這三種方法可以定義相同的字符串亏推,但是在功能上有明顯差別学赛。
8.5.1單引號(hào)
指定一個(gè)簡(jiǎn)單字符串最直接的方法四用單引號(hào) ' 括起來吞杭。
單引號(hào)中不能再包含單引號(hào)盏浇。
如果要在單引號(hào)中表示單引號(hào)需要用反斜線 \ 轉(zhuǎn)義。
如果單引號(hào)之前或字符串結(jié)果需要出現(xiàn)一個(gè)反斜線芽狗,則需要兩個(gè)反斜線表示绢掰。
在單引號(hào)中使用反斜線只能轉(zhuǎn)義單引號(hào)和轉(zhuǎn)義字符本身。
另外童擎,在單引號(hào)字符串中出現(xiàn)的變量不會(huì)被變量的值替代滴劲。即php不會(huì)解析單引號(hào)中的變量,而是將變量名原樣輸出柔昼。
因此在定義簡(jiǎn)單字符串時(shí)哑芹,使用單引號(hào)效率會(huì)比較高,因?yàn)閜hp解析時(shí)不會(huì)花費(fèi)一些處理字符轉(zhuǎn)義和解析變量上的開銷捕透,沒有特殊需求的情況下聪姿,應(yīng)使用單引號(hào)定義字符串碴萧。
8.5.2雙引號(hào)
使用雙括號(hào) " 定義字符串時(shí),可以使用更多特殊字符的轉(zhuǎn)義序列末购。
另外破喻,雙引號(hào)字符中的變量名會(huì)被變量值代替,即可以解析雙引號(hào)中的包含變量盟榴。它提供了解析變量曹质、數(shù)組值或?qū)ο蟮姆椒ā?/p>
8.5.3定界符
另一種給字符串定界的方法是使用定界符<<<。應(yīng)該在<<<之后提供一個(gè)標(biāo)識(shí)符開始擎场,然后是包含的字符串羽德,最后是同樣的標(biāo)識(shí)符結(jié)束字符串。結(jié)束標(biāo)識(shí)符必須從行的第一列開始迅办,并且后面不能包含其它任何字符宅静,空格和空白制表符都不行。同時(shí)站欺,定界符使用的標(biāo)識(shí)符也必須尊混PHP中其它任何標(biāo)簽的命名規(guī)則:只能包含字幕姨夹、數(shù)字、下劃線矾策,而且必須以下劃線或非數(shù)字字母開始磷账。
<?php
//以標(biāo)識(shí)符EOT開始和結(jié)束定義的一個(gè)字符串,也可以使用其它合法標(biāo)識(shí)符贾虽。
$string=<<<EOT
這里可用于輸出大段字符串逃糟。
定界符中同樣可以輸出變量。
EOT;
echo $string;
?>
8.6數(shù)組
數(shù)組是php中一種重要的復(fù)合數(shù)據(jù)類型榄鉴。前面介紹的標(biāo)準(zhǔn)數(shù)據(jù)類型只能存入一個(gè)數(shù)據(jù)履磨,而數(shù)組可以存放多個(gè)數(shù)據(jù),并且可以存放任何類型的數(shù)數(shù)庆尘。php中的數(shù)組實(shí)際上是一張有序圖剃诅。圖是一種把values映射到keys的類型,此類型在很多方面進(jìn)行了優(yōu)化驶忌,因此可以把它當(dāng)成真正的數(shù)組或列表(矢量)矛辕、散列圖、字典付魔、集合聊品、棧、隊(duì)列來使用几苍,以及更多的可能性翻屈。
因?yàn)榭梢杂昧硪粋€(gè)PHP數(shù)組作為值,也可以很容易的模擬樹妻坝。這里僅做簡(jiǎn)要說明伸眶,之后的內(nèi)容里會(huì)詳細(xì)介紹惊窖。
PHP中可以使用多種方法構(gòu)造一個(gè)數(shù)組,這里使用array()方法來新建一個(gè)數(shù)組厘贼,它接受一定數(shù)量的用逗號(hào)分隔的key=》value參數(shù)樹界酒。
<?php
/*格式
array(
key1=>value1,
key2=>value2
……
)
key可以使inter或string
value可以是任何值
*/
$arr=arr("name"=>"liunan",18=>true);//構(gòu)造一個(gè)數(shù)組
echo $arr[18]//通過下標(biāo)訪問數(shù)組單個(gè)數(shù)據(jù)
?>
8.7 對(duì)象(Object)
對(duì)象和數(shù)組都是一種符合數(shù)據(jù)類型,但對(duì)象是一種更高級(jí)的數(shù)據(jù)類型嘴秸。一個(gè)對(duì)象類型的變量毁欣,是由一組屬性值和一組方法構(gòu)成的。后面做詳細(xì)介紹岳掐,此處簡(jiǎn)要說明凭疮。
要初始化一個(gè)對(duì)象,用new語(yǔ)句將對(duì)象實(shí)例化到一個(gè)變量中:
<?php
class Person{ //使用class關(guān)鍵字定義類
var $name; //定義一個(gè)成員屬性$name
function say(){ //定義一個(gè)方法say()
echo"Doing foo.";
}
}
$p=new Person; //實(shí)例化一個(gè)Person放在$p中
$p->name="Tom";
$p->say();
?>
8.8 資源類型(resource)
資源是一種特殊類型的變量岩四,保存了到外部資源的一個(gè)引用哭尝。資源是通過專門函數(shù)來建立和使用的。使用資源類型變量保存有為打開文件剖煌、數(shù)據(jù)庫(kù)連接、圖形畫布區(qū)域等的特殊句柄逝淹,并由程序員創(chuàng)建耕姊、使用和釋放。任何資源在不需要時(shí)都應(yīng)該被及時(shí)釋放栅葡,如果程序員忘記了釋放資源茉兰,系統(tǒng)將自動(dòng)啟動(dòng)垃圾回收機(jī)制,以避免內(nèi)存消耗殆盡欣簇。因此规脸,很少需要用某些free-result函數(shù)來手工釋放內(nèi)存。
在下面的示例中熊咽,使用相應(yīng)的函數(shù)創(chuàng)建不同的資源變量莫鸭。如果創(chuàng)建成功,則返回資源引用賦給變量横殴;如果失敗則返回false被因,所以很容易判斷資源是否創(chuàng)建成功。
<?php
//使用fopen()打開本目錄下的info.txt文件衫仑,返回文件資源給變量$file_handle
$file_handle=fopen("info.txt","w");
//使用opendir()打開windows系統(tǒng)下的C:\\WINDOWS\Fonts目錄梨与,返回目錄資源
$dir_handle=opendir("C:\\WINDOWS\Fonts");
//使用mysql_connect()函數(shù)連接本機(jī)的MySQL管理系統(tǒng),返回MySQL的連接資源
$link_mysql=mysql_connect("localhost","root","123456");
//利用imagecreate()函數(shù)創(chuàng)建一個(gè)100X50像素的畫板文狱,返回圖像資源
$im_handle=imagecreate(100,50);
?>
8.9 NULL類型
特殊的NULL值標(biāo)識(shí)一個(gè)變量沒有值,NULL類型唯一可能的值就是NULL粥鞋。NULL不表示空格,也不表示零瞄崇,也不是空字符串呻粹,而是表示一個(gè)變量的值為空到踏。NULL不區(qū)分大小寫,在下列情況下一個(gè)變量被認(rèn)為是NULL:
- 將變量直接賦值為NULL
- 聲明的變量尚未賦值
- 被unset()函數(shù)銷毀的變量
8.10 偽類型
偽類型并不是PHP語(yǔ)言的基本數(shù)據(jù)類型尚猿,只是因?yàn)镻HP是弱類型語(yǔ)言窝稿,所以在一些函數(shù)中,一個(gè)參數(shù)可以接受多種類型的數(shù)據(jù)凿掂,還可以接受其他函數(shù)作為回調(diào)函數(shù)使用伴榔。常用的偽類型有:
- mixed:說明一個(gè)函數(shù)可以接受多種不同的(但不必須是所有的)類型。例如gettype()可以接受所有的php類型庄萎,str_replace可以接受賜福穿和數(shù)組踪少。
- number:說明一個(gè)函數(shù)可以使integer或float
- callback:不僅可以是一個(gè)函數(shù),也可以是一個(gè)對(duì)象的方法糠涛,靜態(tài)類的方法也可以援奢。一個(gè)php函數(shù)用函數(shù)名字符串來傳遞,可以傳遞任何內(nèi)置的或者用戶自定義的函數(shù)忍捡,除了array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()集漾。
9.數(shù)據(jù)類型之間的相互轉(zhuǎn)換
類型轉(zhuǎn)換是指將變量或值從一種數(shù)據(jù)類型轉(zhuǎn)換成其它數(shù)據(jù)類型。轉(zhuǎn)換的方法有兩種:一種是自動(dòng)轉(zhuǎn)換砸脊,另一種是強(qiáng)制轉(zhuǎn)換具篇。
在PHP中可以根據(jù)變量的使用環(huán)境自動(dòng)將其轉(zhuǎn)換為最合適的數(shù)據(jù)類型,也可以根據(jù)需要強(qiáng)制轉(zhuǎn)換為用戶指定的類型凌埂。
因?yàn)镻HP在變量定義中不需要(或者說不支持)明示的類型定義驱显,變量類型由該變量的上下文決定,所以在PHP中如果沒有明確的要求類型轉(zhuǎn)換瞳抓,都可以使用默認(rèn)的類型自動(dòng)轉(zhuǎn)換埃疫。
9.1自動(dòng)類型轉(zhuǎn)換
每一個(gè)數(shù)據(jù)都有它的類型,具有相同類型的數(shù)據(jù)才能彼此操作孩哑。在PHP中栓霜,自動(dòng)轉(zhuǎn)換通常發(fā)生在不同數(shù)據(jù)類型的變量進(jìn)行混合運(yùn)算時(shí)。當(dāng)參與運(yùn)算的量類型不同臭笆,則自動(dòng)轉(zhuǎn)換后再進(jìn)行運(yùn)算叙淌。通常只有四種標(biāo)量類型(integer、float愁铺、string鹰霍、boolean)才能使用自動(dòng)類型轉(zhuǎn)換。注意茵乱,這并沒有改變這些運(yùn)算數(shù)本身的類型茂洒,改變的僅是這些運(yùn)算數(shù)如何被求值。
自動(dòng)類型轉(zhuǎn)換雖然是由系統(tǒng)自動(dòng)完成的瓶竭,但在混合運(yùn)算時(shí)督勺,自動(dòng)轉(zhuǎn)換要遵循轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行渠羞,以保證精度不降低。所以轉(zhuǎn)換規(guī)則如下:
- 有布爾值參與運(yùn)算時(shí)智哀,TRUE將轉(zhuǎn)換為整型1次询、FALSE將轉(zhuǎn)換為整型0后再參與運(yùn)算。
- 有NULL值參與運(yùn)算時(shí)瓷叫,NULL值將轉(zhuǎn)換為整型0再參與運(yùn)算屯吊。
- 有integer型和float型的值參與運(yùn)算時(shí),先把integer型變量轉(zhuǎn)換為float再參與運(yùn)算摹菠。
- 有字符串和數(shù)值型(integer盒卸、float)數(shù)據(jù)參與運(yùn)算時(shí),字符串先轉(zhuǎn)換為數(shù)字次氨,再參與運(yùn)算蔽介。轉(zhuǎn)換后的數(shù)字是從字符串開始的數(shù)值型字符串,如果在字符串開始的數(shù)值型字符串不帶小數(shù)點(diǎn)煮寡,則轉(zhuǎn)換為integer類型的數(shù)字虹蓄;如果帶有小數(shù)點(diǎn),則轉(zhuǎn)換為float類型的數(shù)字洲押。例如武花,字符串“123abc”轉(zhuǎn)換為123,字符串“123.45abc”轉(zhuǎn)換為123.45杈帐,字符串“abc”轉(zhuǎn)換為整數(shù)0。
9.2 強(qiáng)制類型轉(zhuǎn)換
PHP的強(qiáng)制類型轉(zhuǎn)換有兩種专钉,可以在需要轉(zhuǎn)換的變量前加上用括號(hào)括起來的目標(biāo)類型挑童,也可以額用具體的轉(zhuǎn)換函數(shù),即intval()跃须,floatval()和strval()站叼,或是使用settype函數(shù)轉(zhuǎn)換類型。
<?php
$exp=10;
$exp2=(boolean)$exp;
$exp3=strval($exp);
?>
在括號(hào)中允許的強(qiáng)制類型轉(zhuǎn)換如下菇民。
- (int)尽楔,(integer):轉(zhuǎn)換成整型。
- (bool)第练,(boolean):轉(zhuǎn)換成布爾型阔馋。
- (float),(double)娇掏,(real):轉(zhuǎn)換成浮點(diǎn)數(shù)呕寝。
- (string):準(zhǔn)換成字符串。
- (array):轉(zhuǎn)換成數(shù)組婴梧。
- (object):轉(zhuǎn)換成對(duì)象下梢。
自PHP5起客蹋,如果視圖將對(duì)象轉(zhuǎn)換為浮點(diǎn)數(shù),將會(huì)發(fā)出一條E_NOTICE錯(cuò)誤孽江。
9.3 類型轉(zhuǎn)換細(xì)節(jié)
整數(shù)轉(zhuǎn)換為浮點(diǎn)型讶坯,由于浮點(diǎn)型的精度范圍遠(yuǎn)大于整型,所以轉(zhuǎn)換后的精度不會(huì)改變岗屏。
浮點(diǎn)型轉(zhuǎn)換為整型辆琅,將自動(dòng)舍棄小數(shù)部分,只保留整數(shù)部分担汤。如果一個(gè)浮點(diǎn)數(shù)超過整型數(shù)字的有效范圍涎跨,其結(jié)果將是不確定的。整型的最大值約為2.147e9崭歧。
當(dāng)字符串轉(zhuǎn)換為數(shù)字時(shí)隅很,轉(zhuǎn)換后的數(shù)字時(shí)從字符串開始部分的數(shù)值型字符串,數(shù)值型字符串包括用科學(xué)計(jì)數(shù)法表示的數(shù)字率碾。
NULL值轉(zhuǎn)換為字符串叔营,為空字符串“ ”。
9.4 變量的測(cè)試函數(shù)
一般情況下所宰,我們實(shí)用var_dump()來查看某個(gè)表達(dá)式的值和類型绒尊。
gettype()函數(shù)可以用來確定變量的類型并返回一個(gè)包含變量類型名稱的字符串。但是要查看某個(gè)類型仔粥,不要用gettype()函數(shù)婴谱,而要用is_type()函數(shù),它是PHP提供的一些特定類型的測(cè)試函數(shù)之一躯泰。每個(gè)函數(shù)都使用一個(gè)變量作為參數(shù)谭羔,并返回true或者false。這些函數(shù)如下:
- is_bool():判斷是否是布爾型
- is_int()麦向、is_integer()和is_long():判斷是否是整型
- is_float()瘟裸、is_double()和is_real():判斷是否是浮點(diǎn)數(shù)
- is_string():判斷是否是字符串
- is_array():判斷是否是數(shù)組
- is_object():判斷是否是對(duì)象
- is_resource():判斷是否是資源類型
- is_null():判斷是否為空
- is_scalar():判斷是否是標(biāo)量,也可以使一個(gè)整數(shù)诵竭、浮點(diǎn)數(shù)话告、布爾型或字符串
- is_numeric():判斷是否是任何類型的數(shù)字或字符串
- is_callable():判斷是否是有效的函數(shù)名
10 常量
常量一般用于數(shù)據(jù)計(jì)算中固定的數(shù)值。在腳本執(zhí)行期間卵慰,常量一旦被定義沙郭,就不能再改變或者取消定義。
常量的作用域是全局的呵燕,可以在腳本的任何地方聲明和訪問到常量棠绘。
另外,雖然變量和常量都是PHP的存儲(chǔ)單元,但常量聲明的類型只能是標(biāo)量數(shù)據(jù)(boolean氧苍、integer夜矗、float和string)。
對(duì)于整型這種簡(jiǎn)單數(shù)據(jù)類型常量來說让虐,要比聲明變量效率高一點(diǎn)紊撕,但是字符串這種復(fù)雜數(shù)據(jù)類型的話就差不多了。
常量在php中非常多見赡突,不僅可以自定義常量使用对扶,更主要的是幾乎每個(gè)PHP擴(kuò)展中都默認(rèn)提供了大量可供使用的常量,而且PHP也提供了一些比較實(shí)用的魔術(shù)常量惭缰。
10.1 常量的定義和使用
聲明常量的聲明變量的方式不同浪南,在PHP中是通過define()函數(shù)來定義常量的。常量的命名與變量相似漱受,也要遵循PHP標(biāo)識(shí)符的命名規(guī)則络凿。另外,常量同樣大小寫敏感昂羡,按照慣例常量名稱總是大寫的絮记,但是不能加$符。define()函數(shù)的格式如下:
boolean define(string name虐先,mixed value怨愤,[bool case_insensitive])
此函數(shù)的第一個(gè)參數(shù)為字符串類型的常量名,第二個(gè)參數(shù)為常量值或表達(dá)式蛹批,第三個(gè)case_insensitive是可選參數(shù)撰洗,如果設(shè)為TRUE,則常數(shù)將會(huì)定義成不區(qū)分大小寫腐芍,默認(rèn)是區(qū)分大小寫的了赵。
如果只想檢查是否定義了某個(gè)常量,則用defined()函數(shù)甸赃。示例如下:
<?php
define("EXP",100);
define("EXP2",true);
define("EXP3","hi world");
define("EXP3","hi world",true);
echo exp3; //輸出
echo EXP3;
if (defined("EXP")){
}
?>
注意:如果使用一個(gè)沒有聲明的常量,則常量名稱會(huì)被解析為一個(gè)普通字符串冗酿,但會(huì)比直接使用字符串慢近8倍左右埠对,所以聲明字符串時(shí)一定要加上單引號(hào)或雙引號(hào)。
10.2 常量和變量
常量與變量都是PHP的存儲(chǔ)單元裁替,但名稱项玛、作用域及聲明方式都有所不同。以下是常量和變量的不同點(diǎn)弱判。
- 常量前面沒有美元符號(hào)$襟沮。
- 常量只能用define()函數(shù)定義,而不能通過賦值語(yǔ)句定義。
- 常量可以不用理會(huì)變量范圍的規(guī)則而在任何地方定義和訪問开伏。
- 常量一旦定義就不能被重新定義或取消定義膀跌,直到腳本結(jié)束自動(dòng)釋放。
- 常量的值只能是標(biāo)量(boolean固灵、integer捅伤、float、string這四種類型之一)巫玻。
10.3 系統(tǒng)中的預(yù)定義常量
PHP中除了自己定義常量外丛忆,還預(yù)定義了一系列系統(tǒng)常量,可以在程序中直接使用仍秤。
不過很多常量都是不同的擴(kuò)展庫(kù)定義的熄诡,只有加載了這些擴(kuò)展庫(kù)時(shí)才會(huì)出現(xiàn)。下表是常見的一些預(yù)定義常量:
10.4 PHP中的魔術(shù)常量
PHP中還有5個(gè)常量會(huì)根據(jù)他們使用的位置而改變诗力,這樣的常量在PHP中被稱為“魔術(shù)常量”凰浮。另外,這些特殊常量不分大小寫姜骡,PHP中常見的幾個(gè)魔術(shù)常量如下:
使用如下:
<?php
echo "PHP程序當(dāng)前文件路徑名:".FILE;
echo "<br >PHP程序當(dāng)前行數(shù):".LINE;
echo "<br >當(dāng)前PHP程序的版本:".PHP_VERSION;
echo "<br >當(dāng)前操作系統(tǒng):".PHP_OS;
?>
11 PHP中的運(yùn)算符
運(yùn)算符和變量是每種計(jì)算機(jī)語(yǔ)法中必須有的一部分导坟,是一個(gè)命令解釋器對(duì)一個(gè)或多個(gè)操作符執(zhí)行某種運(yùn)算的符號(hào),也稱操作符圈澈。
可以根據(jù)操作數(shù)的個(gè)數(shù)分為一元運(yùn)算符惫周、二元運(yùn)算符、三元運(yùn)算符康栈。一元運(yùn)算符只運(yùn)算一個(gè)數(shù)递递,例如!(取反運(yùn)算符)或++(加一運(yùn)算符)啥么。二元運(yùn)算符可以運(yùn)算兩個(gè)值登舞,PHP支持的大多數(shù)運(yùn)算符都是這種二元運(yùn)算符。而三元運(yùn)算符只有一個(gè)(悬荣?:)菠秒。
如果按運(yùn)算符的不同功能去分類,可以分為算數(shù)運(yùn)算符氯迂、字符串運(yùn)算符践叠、賦值運(yùn)算符、比較運(yùn)算符嚼蚀、邏輯運(yùn)算符禁灼、位運(yùn)算符和其它運(yùn)算符。
11.1 算術(shù)運(yùn)算符
算術(shù)運(yùn)算符包括常見的加轿曙、減弄捕、乘僻孝、除、取余等守谓。使用方法與數(shù)學(xué)運(yùn)算符一樣穿铆。
這里重點(diǎn)介紹一下“%”、“++”和“--”三個(gè)運(yùn)算符分飞。
求模運(yùn)算也稱取余運(yùn)算悴务,在PHP語(yǔ)言中求模時(shí),會(huì)將兩邊的操作數(shù)轉(zhuǎn)換為整型譬猫,然后求余數(shù)讯檐。在程序開發(fā)時(shí)使用求模運(yùn)算通常有兩個(gè)目的:第一個(gè)目的是做整除運(yùn)算,如計(jì)算閏年時(shí)染服,能被4整除不能被100整除扑庞,或者能被400整除的就是閏年壳坪;另一個(gè)目的是讓輸入數(shù)不超過某個(gè)數(shù)的范圍邪狞。例如咳秉,讓一個(gè)隨機(jī)數(shù)在10以內(nèi),就可以讓這個(gè)隨機(jī)數(shù)和10取余秉颗。
在編程中痢毒,最常見的運(yùn)算時(shí)對(duì)一個(gè)變量進(jìn)行加1或減1的操作〔仙可以使用+=或-=哪替。另外,PHP也提供了遞增和遞減運(yùn)算符菇怀,即 ++ 和 - - 凭舶,常用于循環(huán)之中。
++ 和 - - 都可以在變量的前面使用爱沟,也可以在變量的后面使用帅霜,這樣就決定了變量時(shí)先運(yùn)算后賦值,還是先賦值后運(yùn)算呼伸。
$a++身冀,等同于$a=$a+1,先運(yùn)算后賦值;
如下例:
<?php
$a=10;
$b=$a++;//先執(zhí)行$b=$a括享,此時(shí)b=10闽铐,然后執(zhí)行$b+1,b=11
?>
++$a,等同于$a=$a+1,先賦值后運(yùn)算;
<?php
$a=10;
$b=++$a;//先執(zhí)行$a=$a+1奶浦,此時(shí)a=11,然后執(zhí)行$b=$a,b=11
?>
記憶方法:$a++中踢星,a在前先賦值澳叉,a在后后賦值。
另外,在處理字符變量的元數(shù)運(yùn)算符時(shí)成洗,沿用了Perl的習(xí)慣五督,而非C的。如在Perl中瓶殃,‘Z’+1將得到‘AA’充包;而在C中將得到'['(ord('Z'==90,ord('['==91)。
字符變量只能遞增遥椿,不能遞減基矮,并且只支持純字母(az和AZ)。
11.2 字符串運(yùn)算符
PHP中字符串運(yùn)算符只有一個(gè)冠场,是英文的句號(hào)(.)家浇,用于連接字符串。字符串與任何標(biāo)量數(shù)據(jù)類型連接碴裙,得到的都是引得字符串钢悲。
<?php
$a=10;
$b='我的';
$c='年齡為';
$d=$b.$c.$a;
echo $d; //輸出結(jié)果:我的年齡為10
?>
11.3 賦值運(yùn)算符
賦值運(yùn)算符也是一個(gè)二元運(yùn)算符舔株,之前接觸過最基本的賦值運(yùn)算符=莺琳,用于將右邊的值賦給左邊的變量。另外载慈,還有一些復(fù)合賦值運(yùn)算符惭等。
用例如下;
<?php
$x=10;
echo $x; // 輸出10
$y=20;
$y += 100;
echo $y; // 輸出120
$a=$b=$c=5; //連續(xù)賦值
?>
11.4 比較運(yùn)算符
比較運(yùn)算符也稱關(guān)系運(yùn)算符、條件運(yùn)算符娃肿,是一種常用的二元運(yùn)算符咕缎。比較的結(jié)果只能是布爾值TRUE或者FALSE。
比較運(yùn)算符常用語(yǔ)if條件和while循環(huán)等流程控制語(yǔ)句中料扰,用于判斷程序執(zhí)行的條件凭豪。
==和===的區(qū)別在于是否比較數(shù)據(jù)類型。
11.5 邏輯運(yùn)算符
邏輯運(yùn)算符用來判斷真假晒杈,返回值為布爾值TRUE或FALSE嫂伞。
與或非和異或。
11.6 位運(yùn)算符
任何信息在計(jì)算機(jī)中都是以二進(jìn)制數(shù)的形式保存的拯钻,位運(yùn)算符允許對(duì)整型數(shù)中指定的位進(jìn)行置換帖努。
如果左右參數(shù)都是字符串,則位運(yùn)算符將操作字符的ASCII值粪般,浮點(diǎn)數(shù)也會(huì)自動(dòng)轉(zhuǎn)換為整型再進(jìn)行與位運(yùn)算拼余。
位運(yùn)算說穿了,就是直接對(duì)整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行操作亩歹。比如匙监,and運(yùn)算本來是一個(gè)邏輯運(yùn)算符凡橱,但整數(shù)與整數(shù)之間也可以進(jìn)行and運(yùn)算。舉個(gè)例子亭姥,6的二進(jìn)制是110稼钩,11的二進(jìn)制是1011,那么6 and 11的結(jié)果就是2达罗,它是二進(jìn)制對(duì)應(yīng)位進(jìn)行邏輯運(yùn)算的結(jié)果(0表示False坝撑,1表示True,空位都當(dāng)0處理)粮揉。
位運(yùn)算雖然用于對(duì)操作數(shù)中的每個(gè)二進(jìn)制位進(jìn)行運(yùn)算巡李,可以完成一些底層的系統(tǒng)程序設(shè)計(jì),但是在程序開發(fā)時(shí)很少用到滔蝉,因?yàn)槭褂肞HP程序很少參與到計(jì)算機(jī)底層的技術(shù)击儡。
關(guān)于位運(yùn)算的詳情見官方文檔:
http://www.php.net/manual/zh/language.operators.bitwise.php
11.7 其它運(yùn)算符
除了以上運(yùn)算符外,還有一些其它運(yùn)算符用于實(shí)現(xiàn)特定功能:
三元運(yùn)算符 蝠引?:阳谍,可以提供簡(jiǎn)單的邏輯判斷。示例:
<?php
$a<$b?$c=1:$c=0;
//相當(dāng)于下列語(yǔ)句
if($a<$b){
$c=1;
}
else{
$c=0;
}
?>
執(zhí)行運(yùn)算符螃概,反引號(hào)(``)矫夯。PHP將嘗試將反引號(hào)中的內(nèi)容作為操作系統(tǒng)命令來執(zhí)行,并將其輸出信息返回吊洼。
效果相當(dāng)于函數(shù)shell_exec()训貌。
錯(cuò)誤控制運(yùn)算符 @。將其放置在一個(gè)表達(dá)式之前冒窍,該表達(dá)式可能產(chǎn)生出的任何警告信息都會(huì)被忽略递沪。
數(shù)組下標(biāo)指定符號(hào)=>。通過此符號(hào)指定數(shù)組的鍵與值综液。
對(duì)象成員訪問符號(hào)->款慨。訪問對(duì)象中的成員屬性或成員方法。
instanceof谬莹。類型運(yùn)算符檩奠,用來測(cè)定一個(gè)給定的對(duì)象是否來自指定的對(duì)象類。
11.8 運(yùn)算符優(yōu)先級(jí)
所謂的優(yōu)先級(jí)附帽,是指在表達(dá)式中哪一個(gè)運(yùn)算符應(yīng)該先計(jì)算埠戳。
如果運(yùn)算符優(yōu)先級(jí)相同,則使用從左到右的左聯(lián)順序蕉扮。
優(yōu)先級(jí)相同的運(yùn)算符整胃,此時(shí)他們的家結(jié)合方法決定求值順序。
一般不強(qiáng)記優(yōu)先級(jí)喳钟,通常使用小括號(hào)()改變表達(dá)式的優(yōu)先級(jí)更加易懂爪模。
11.9 表達(dá)式
在PGP中欠啤,幾乎所編寫的任何代碼都可以看做一個(gè)表達(dá)式,通常是變量屋灌、常量和運(yùn)算符號(hào)的組合。簡(jiǎn)單卻精確的定義一個(gè)表達(dá)式的方式就是“任何有值的東西”应狱。
- 最基本的表達(dá)式形式是常量和變量共郭,例如賦值語(yǔ)句$a=5。
- 稍微復(fù)雜的表達(dá)式就是函數(shù)疾呻,例如$a=foo()除嘹。
- 算術(shù)運(yùn)算符中的前、后遞增遞減也是岸蜗,例如$a++尉咕、$--a。
- 常用的表達(dá)式類型是“比較表達(dá)式”璃岳,例如$a>5年缎、$a<=5。
- 組合的運(yùn)算賦值也是常用的表達(dá)式铃慷,例如$a+=5单芜。
- 三元運(yùn)算符(?:)也是一種表達(dá)式犁柜,例如$v=($a?$b=5:$c=10)洲鸠。