1.PHP基本語法(一)

php可以做什么

  • php是一種可以在服務(wù)器端運(yùn)行的編程語言胧砰,可以運(yùn)行在Web服務(wù)器端颂砸。

  • php是一門后臺(tái)編程語言羡洁,是目前比較主流的后臺(tái)編程語言。

認(rèn)識(shí)一下PHP及其功能苛蒲。

  1. 運(yùn)行在服務(wù)器端:學(xué)會(huì)了PHP卤橄,就可以指揮服務(wù)器給你干活,甚至是搞破壞_(千萬不能真這么做咯)臂外,WEB網(wǎng)站的大部分?jǐn)?shù)據(jù)都是存儲(chǔ)在服務(wù)器端的窟扑,PHP就是用來處理這些存儲(chǔ)在服務(wù)器的數(shù)據(jù)的(功能強(qiáng)大吧)。

  2. 跨平臺(tái):服務(wù)器可以是多種平臺(tái)的服務(wù)器漏健,比如Linux嚎货、Windows、Unix蔫浆,你都可以指揮(不用怕只能指揮一種服務(wù)器啦吧)殖属。

  3. 腳本語言:它是通過編寫腳本,也就是一行行的計(jì)算機(jī)指令(也可以理解為特定的英文單詞)瓦盛,來指揮服務(wù)器來工作的洗显,因此,在編寫PHP的過程其實(shí)就是與老外(服務(wù)器成老外啦)交流的過程原环,交流的語言就是PHP挠唆。

  4. 免費(fèi):免費(fèi)使用(天下還真有免費(fèi)的午餐)。

Paste_Image.png

認(rèn)識(shí)PHP代碼標(biāo)識(shí)

想在頁面中編寫PHP?代碼非常容易嘱吗,如下面代碼:

<?php
      echo "Hello,PHP!";
?>
Paste_Image.png

就像你可以編寫JavaScript腳本語言需要寫在<script></script>標(biāo)簽之間一樣玄组,你可以在頁面中編寫PHP代碼寫在<?php ?>標(biāo)簽之間,但注意后面的?>是可以省略的。

文件后綴名為.php結(jié)尾俄讹,上傳到Web服務(wù)器的文檔根目錄下哆致,通過瀏覽器訪問Web服務(wù)器管理下的PHP文件,就可以運(yùn)行PHP文件患膛。

使用不同的四對標(biāo)記

  1. <?php開始和以?>結(jié)束標(biāo)記是標(biāo)準(zhǔn)風(fēng)格沽瞭,這是PHP推薦使用的標(biāo)記風(fēng)格。

  2. <script language="php">開始和<script>結(jié)束是長風(fēng)格標(biāo)記剩瓶,這種標(biāo)記最長驹溃,總是可用的,但我們并不常用延曙。

  3. <?開始和以?>結(jié)束標(biāo)記是簡短風(fēng)格的標(biāo)記豌鹤,是最簡單的,但是系統(tǒng)管理員偶爾會(huì)禁用掉它枝缔,因?yàn)樗鼤?huì)干擾XML文檔的聲明布疙。只用通過php.ini配置文件中的指令short_open_tag打開后就可以使用。

  4. <%開始和以%>結(jié)束標(biāo)記是ASP風(fēng)格的標(biāo)記愿卸,可以在php.ini配置文件設(shè)定中啟用了asp_tags選項(xiàng)就可以使用它(默認(rèn)是禁用的)灵临,習(xí)慣了ASP風(fēng)格的可以使用它。

指令分隔符

PHP同C或Perl以及Java一樣趴荸,語句分為兩種:

  1. 一種是在程序中使用結(jié)構(gòu)定義語句例如流程控制儒溉、函數(shù)與類的定義等,是用大括號(hào)來標(biāo)記代碼塊发钝,在大括號(hào)后面不要用分號(hào)顿涣。

  2. 另一種是在程序中使用功能執(zhí)行語句,如變量的聲明酝豪、內(nèi)容的輸出涛碑、函數(shù)的調(diào)用等,是用來在程序中執(zhí)行某些特定功能的語句孵淘,這種語句也可稱為指令蒲障,PHP需要在每個(gè)指令后用分號(hào);結(jié)束。
    和其他語言不一樣的是瘫证,在PHP中右括號(hào)?>前的分號(hào)不是必選的

每個(gè)語句結(jié)束之后忘記加分號(hào)可是會(huì)報(bào)語法錯(cuò)誤的哦~

程序注釋

對于閱讀代碼的人來說揉阎,注釋其實(shí)就相當(dāng)于代碼的解釋和說明。注釋可以用來解釋腳本的用途痛悯、腳本編寫人余黎、為什么要按如此的方法編寫代碼重窟、上一次修改的時(shí)間等等载萌。
PHP支持C、C++和Shell腳本風(fēng)格的注釋,如下:

  1. 單行注釋 //
$a = 3 //申明一個(gè)變量 這是單行注釋
  1. 多行注釋 (注意:不能嵌套)/**/
/* 多行注釋內(nèi)容
author:dp
createtime:2017-2-7
*/
  1. 腳本注釋 #
#這是一種腳本注釋方法

程序員在編程時(shí)使用注釋是一種良好的習(xí)慣扭仁,可以用來寫幫助文檔垮衷,有助于調(diào)試程序。
注意: 注釋要寫在代碼的上面或是右邊

變量

  1. 什么是變量

變量是用于存儲(chǔ)值的乖坠,我們命令服務(wù)器去干活的時(shí)候搀突,往往需要產(chǎn)生一些數(shù)據(jù),需要臨時(shí)性存放起來熊泵,方便取用仰迁。我們也可以理解為,變量就像一個(gè)購物袋顽分,我們可以用來裝蘋果徐许、榴蓮(當(dāng)然也可以用來裝玫瑰),需要注意的是卒蘸,一般情況下一個(gè)變量只能裝一個(gè)(不要太貪心)值雌隅,除非是復(fù)合變量(后面變量類型時(shí)會(huì)介紹),當(dāng)我們放進(jìn)去一個(gè)蘋果后缸沃,再放進(jìn)榴蓮的時(shí)候恰起,蘋果就被替換掉,再放入香蕉趾牧,那么榴蓮就被替換了检盼。

  1. 如何定義變量

定義變量就是向服務(wù)器的內(nèi)存申請空間,用來存儲(chǔ)數(shù)據(jù)翘单。這時(shí)候我們就需要用到變量名和變量值.

<?php
$n = 10;
$var_name = '蘋果';
?>

解釋一下梯皿,在=左邊的是變量名,右邊的是變量值县恕。完成定義變量后东羹,需要一個(gè);告訴服務(wù)器這行指令已經(jīng)結(jié)束。其中變量名必須通過$符號(hào)標(biāo)識(shí)忠烛,=可不是我們平常所說的等號(hào)哦属提,在PHP中,=賦值運(yùn)算符美尸;在這里冤议,var_name是變量名,蘋果是變量值师坎,它是一個(gè)字符串恕酸;n是變量名,10是變量值胯陋,它是一個(gè)整型蕊温。

  1. 變量名的命名規(guī)則

變量名除了需要$進(jìn)行標(biāo)識(shí)外袱箱,還有一些規(guī)則需要遵守。變量名的命名規(guī)則主要有三條:
①變量名必須以字母或下劃線“-”開頭义矛,數(shù)字不能開頭发笔。如”$_name”,”$name” ,”$name2”等
②變量名只能由字母數(shù)字凉翻、以及下劃線組成了讨,還能包含漢字。如”$_qq”,”$qq308” ,”$my_apple”制轰,“比如"$name我等”前计,但是”$name*”是不對的。
③變量名不允許包含空格垃杖。當(dāng)變量名由多個(gè)單詞組成残炮,建議使用下劃線“-”進(jìn)分隔比如 $my_apple,俗稱下劃線法缩滨,或者以大寫字母開頭比如 $myApple势就,俗稱駱駝式命名法(也稱駝峰命名法)。
特別需要注意的是脉漏,在PHP中變量名是區(qū)分大小寫的苞冯,如“$my_book”與“$my_Book”代表兩個(gè)不同的變量。

  1. 變量的數(shù)據(jù)類型

數(shù)據(jù)類型:
PHP 支持八種原始類型侧巨。

##四種標(biāo)量類型##: 
布爾型(boolean) 
整型(integer)
浮點(diǎn)型(float)(浮點(diǎn)數(shù)舅锄,也作double) 
字符串(String) 
##兩種復(fù)合類型##: 
數(shù)組(Array) 
對象(Object) 
##最后是兩種特殊類型##: 
資源(Resource)
NULL

在變量中,由于變量占用的空間單元不一樣(占的地盤大小不一樣)司忱,也分成幾種數(shù)據(jù)類型皇忿。
我們可以通過使用“memory_get_usage”獲取當(dāng)前PHP消耗的內(nèi)存。
可以對比一下內(nèi)存消耗

<?php
echo $m1 = memory_get_usage(); //初始化消耗內(nèi)存
echo "<br/>";
$var_string = "123";
echo $m2 = memory_get_usage()-$m1; //字符串消耗內(nèi)存
echo "<br/>"; 
$n=123;
echo $m3 = memory_get_usage()-$m1-$m2; //整型消耗內(nèi)存
echo "<br/>"; 
$f=123.00;
echo $m4 = memory_get_usage()-$m1-$m2-$m3;//浮點(diǎn)型消耗內(nèi)存 
echo "<br/>"; 
$var_array = array("123");
echo $m5 = memory_get_usage()-$m1-$m2-$m3-$m4; //數(shù)組消耗內(nèi)存
?>

gettype()返回變量的類型坦仍,共有8個(gè)可能的值string鳍烁、integerfloat繁扎、boolean幔荒、arrayobject梳玫、null爹梁、unknown
is_type()查看變量是否屬于某個(gè)類型,如果是提澎,返回TRUE姚垃,否則,返回FALSE

$arr = array(1);
echo is_array($arr);
$num = 5;
echo is_int($num);

is_array -- 檢測變量是否是數(shù)組
is_bool -- 檢測變量是否是布爾型
is_callable -- 檢測參數(shù)是否為合法的可調(diào)用結(jié)構(gòu)
is_double -- is_float() 的別名
is_float -- 檢測變量是否是浮點(diǎn)型
is_int -- 檢測變量是否是整數(shù)
is_integer -- is_int() 的別名
is_long -- is_int() 的別名
is_null -- 檢測變量是否為 NULL
is_numeric -- 檢測變量是否為數(shù)字或數(shù)字字符串
is_object -- 檢測變量是否是一個(gè)對象
is_real -- is_float() 的別名
is_resource -- 檢測變量是否為資源類型
is_scalar -- 檢測變量是否是一個(gè)標(biāo)量
is_string -- 檢測變量是否是字符串
var_dump()獲取變量的值和類型的詳細(xì)信息

$str = ‘hello’;
var_dump($str);
$arr = array(‘A’, ‘B’, ‘C’);
var_dump($arr);

在php中盼忌,支持8種原始類型积糯,其中包括四種標(biāo)量類型掂墓、兩種復(fù)合類型和兩種特殊類型。php是一門松散類型的語言絮宁,不必向php聲明變量的數(shù)據(jù)類型梆暮。php會(huì)自動(dòng)把變量轉(zhuǎn)換為自動(dòng)的數(shù)據(jù)類型服协。

<?php
$string="就是就是"; //定義一個(gè)字符串“就是就是”
var_dump($string); 
echo "<br/>";
$string="9494";//把它變成整型“9494”
var_dump($string); //通過“var_dump”函數(shù)绍昂,輸出數(shù)據(jù)類型
 echo "<br/>";
?>

輸出結(jié)果:string(12) "就是就是" int(9494)
我們可以發(fā)現(xiàn), 這個(gè)變量自動(dòng)就從原來的字符串轉(zhuǎn)換成了整型咯偿荷。

4.1 PHP標(biāo)量類型—整型

整型(integer):類似于常見的整數(shù)窘游。它可以用十進(jìn)制、八進(jìn)制跳纳、十六進(jìn)制指定忍饰。十進(jìn)制就是日常使用的數(shù)字;八進(jìn)制寺庄,數(shù)字前必須加上“0”(阿拉伯?dāng)?shù)字0)艾蓝;十六進(jìn)制,數(shù)字前必須加“0x”(阿拉伯?dāng)?shù)字0)斗塘。如:

<?php
$data_int = 1234;  // 十進(jìn)制數(shù)
$data_int = -567;    // 一個(gè)負(fù)數(shù)
$data_int = 0123;    // 八進(jìn)制數(shù)(等于十進(jìn)制的 83)
$data_int = 0x1a;    // 十六進(jìn)制數(shù)(等于十進(jìn)制的 26)
?>
4.2 標(biāo)量類型—浮點(diǎn)型

浮點(diǎn)型(浮點(diǎn)數(shù)赢织、雙精度數(shù)或?qū)崝?shù)),也就是通常說的小數(shù)馍盟,可以用小數(shù)點(diǎn)或者科學(xué)計(jì)數(shù)法表示于置。科學(xué)計(jì)數(shù)法可以使用小寫的e贞岭,也可以使用大寫的E八毯。

<?php
echo $num_float1 = 1.234;    //小數(shù)點(diǎn),輸出結(jié)果1.234
echo $num_float2 = 1.2e3;    //科學(xué)計(jì)數(shù)法,小寫e瞄桨,輸出結(jié)果1200
echo $num_float3 = 7.0E-3;    //科學(xué)計(jì)數(shù)法话速,大寫E,輸出結(jié)果0.007
?>
4.3 PHP標(biāo)量類型—字符串

字符串是由一系列字符組成芯侥,在PHP中尿孔,字符和字節(jié)一樣,也就是說筹麸,一共有256種不同字符的可能性活合。
字符串型可以用三種方法定義:單引號(hào)形式雙引號(hào)形式Heredoc結(jié)構(gòu)形式物赶。

<?php
$str_string1='我是字符串1';
$str_string2="我是字符串2";
echo $str_string1;
echo "<br/>";
echo $str_string2;
?>

當(dāng)你的字符串中包含引號(hào)的時(shí)候白指,我們怎么辦?

<?php
$str_string1 = '甲問:"你在哪里學(xué)的PHP酵紫?"';       //單引號(hào)中嵌入雙引號(hào)
$str_string2 = "乙毫不猶豫地回答:'你猜告嘲!'";      //雙引號(hào)中嵌入單引號(hào)
$str_string3 = '甲問:\'能告訴我網(wǎng)址嗎错维?\'';            //單引號(hào)中嵌入單引號(hào),使用轉(zhuǎn)義符“\”
$str_string4 = "乙答道:\"www.你猜.com\"";        //雙引號(hào)中嵌入雙引號(hào)橄唬,使用轉(zhuǎn)義符“\”
echo $str_string1;
echo $str_string2;
echo $str_string3;
echo $str_string4;
?>

當(dāng)引號(hào)遇到美元咋辦赋焕?這里的美元可不是真正的美元,而是用美元符號(hào)標(biāo)識(shí)的變量仰楚。

字符串轉(zhuǎn)義
\n 換行
\r 回車
\t 水平制表符隆判,tab鍵
\ 反斜杠
$ 美元符
\” 雙引號(hào)
當(dāng)雙引號(hào)中包含變量時(shí),變量會(huì)與雙引號(hào)中的內(nèi)容連接在一起僧界;雙引號(hào)可以解析變量侨嘀,如果想明確的指定名字的結(jié)束,可以用花括號(hào){ }把變量名括起來捂襟。echo "He drank some {$beer}s";
當(dāng)單引號(hào)中包含變量時(shí)咬腕,變量會(huì)被當(dāng)做字符串輸出。

<?php
$love = "I love you!"; 
$string1 = "xxx,$love";
$string2 = 'xxx,$love';
echo $string1;                    //輸出:xxx葬荷,I  love you!
echo "<br/>";
echo $string2;                    //輸出:xxx涨共,$love
?>

當(dāng)我的字符串很長怎么辦?

我們可以使用Heredoc結(jié)構(gòu)形式(定界符)的方法來解決該問題宠漩,首先使用定界符表示字符串(<<<)举反,接著在“<<<“之后提供一個(gè)標(biāo)識(shí)符GOD,然后是字符串哄孤,最后以提供的這個(gè)標(biāo)識(shí)符結(jié)束字符串照筑。

<?php
$string1=<<<GOD
我有一只小毛驢,我從來也不騎瘦陈。
有一天我心血來潮凝危,騎著去趕集。
我手里拿著小皮鞭晨逝,我心里正得意蛾默。
不知怎么嘩啦啦啦啦,我摔了一身泥.
GOD;
echo $string1;
?>

在賦值符號(hào)后捉貌,輸入定界符“<<<”,接著是標(biāo)識(shí)符支鸡,你可以用你的女神作為標(biāo)識(shí)符“GOD”,如第2行趁窃,也可以使用你喜歡的狗狗牧挣,“DOG”作為標(biāo)識(shí)符,但是醒陆,結(jié)尾處的標(biāo)識(shí)符也必須是一樣的瀑构。此外,在結(jié)尾的一行刨摩,如第7行寺晌,一定要另起一行世吨,并且此行除了“GOD”,并以“呻征;”號(hào)結(jié)束之外耘婚,不能有任何其他字符,前后都不能有陆赋,包括空格沐祷,否則會(huì)出現(xiàn)錯(cuò)誤的哦。切記切記哦奏甫。

定界符也可以解析變量戈轿,如果想明確的指定名字的結(jié)束凌受,可以用花括號(hào){ }把變量名括起來阵子。

4.4標(biāo)量類型—布爾類型

布爾類型(boolean):只有兩個(gè)值,一個(gè)是TRUE胜蛉,另一個(gè)是FALSE挠进,可以理解為是或否。它不區(qū)分大小寫誊册。主要用在條件結(jié)構(gòu)中领突。需要注意的是,當(dāng)我們用echo指令輸出布爾類型時(shí)案怯,如果是true則輸出的是1君旦,false則什么也不輸出。我們可以使用var_dump函數(shù)嘲碱,獲取它真正的數(shù)據(jù)類型金砍。

當(dāng)其他類型轉(zhuǎn)換為 boolean類型 時(shí),以下值被認(rèn)為是FALSE:
布爾值 FALSE
整型值 0(零)
浮點(diǎn)型值 0.0(零)
空白字符串和字符串"0"
沒有成員變量的數(shù)組
沒有單元的對象(僅適用于 PHP 4)
特殊類型 NULL(包括尚未設(shè)定的變量)
所有其它值都被認(rèn)為是 TRUE(包括任何資源)麦锯。

4.5第一種特殊類型—資源

資源(resource):資源是由專門的函數(shù)來建立和使用的恕稠,例如打開文件、數(shù)據(jù)連接扶欣、圖形畫布鹅巍。我們可以對資源進(jìn)行操作(創(chuàng)建、使用和釋放)料祠。任何資源骆捧,在不需要的時(shí)候應(yīng)該被及時(shí)釋放。如果我們忘記了釋放資源髓绽,系統(tǒng)自動(dòng)啟用垃圾回收機(jī)制敛苇,在頁面執(zhí)行完畢之后回收資源,以避免內(nèi)存被消耗殆盡梧宫。

<?php
$file=fopen("f.txt","r");  //打開文件
$con=mysql_connect("localhost","root","root");  //連接數(shù)據(jù)庫
$img=imagecreate(100,100);//圖形畫布
?>
4.6PHP第二種特殊類型—空類型

NULL(NULL):NULL是空類型接谨,對大小寫不敏感摆碉,NULL類型只有一個(gè)取值,表示一個(gè)變量沒有值脓豪,當(dāng)被賦值為NULL巷帝,或者尚未被賦值,或者被unset()扫夜,這三種情況下變量被認(rèn)為為NULL楞泼。

<?php
error_reporting(0);                    //禁止顯示PHP警告提示
$var;                                        //為變量未賦值
var_dump($var);                     //NULL
$var1=null;                              //將null賦值給變量$var1
var_dump($var1);                      //NULL
$var2=NULL;                           //將NULL賦值給變量$var2
var_dump( $var2);                    //NULL
$var3 = "節(jié)日快樂!";
unset($var3);                             //將變量$var3注銷定義
var_dump($var3);                    //NULL
?>
4.7第一種復(fù)合類型—數(shù)組

PHP 中的數(shù)組實(shí)際上是一個(gè)有序圖笤闯。圖是一種把 values 映射到 keys 的類型堕阔。此類型在很多方面做了優(yōu)化,因此可以把它當(dāng)成真正的數(shù)組來使用颗味,或列表(矢量)身腻,散列表(是圖的一種實(shí)現(xiàn)),字典腕侄,集合殊校,棧,隊(duì)列以及更多可能性晶默。因?yàn)榭梢杂昧硪粋€(gè) PHP 數(shù)組作為值谨娜,也可以很容易地模擬樹。本書將用一章介紹數(shù)組的聲明與使用磺陡,這里僅作簡要說明趴梢。
PHP中可以使用多種方式構(gòu)建一個(gè)數(shù)組,在這里我們只用array()語言結(jié)構(gòu)來新建一個(gè)array币他。它接受一定數(shù)量用逗號(hào)分隔的 key => value 參數(shù)對坞靶。

語法結(jié)構(gòu):
   array( [key =>] value , ... )
// key 可以是integer或者string類型
// value 可以是任何值 
<?php
    $arr = array(
      "foo" => "bar", 12 => true);  
?>

4.8第二種復(fù)合類型—對象

在PHP中,對象和數(shù)組一樣都是一種復(fù)合數(shù)據(jù)類型圆丹。但對象是一種更高級的數(shù)據(jù)類型滩愁。一個(gè)對象類型的變量,是由一組屬性值和一組方法構(gòu)成辫封,其中屬性表明對象的一種狀態(tài)硝枉,方法通常用來表明對象的功能。本書將用一章的內(nèi)容來介紹對象的使用倦微,這里僅作簡要的說明妻味。要初始化一個(gè)對象,用 new 語句將對象實(shí)例到一個(gè)變量中欣福。

<?php
    class foo{      //類的定義
         function do_foo(){      //類中方法的定義
            echo "Doing foo.";  
         }
    }
    $bar = new foo; //初始化類foo創(chuàng)建一個(gè)對象bar
    $bar->do_foo(); //通過對象bar調(diào)用方法do_foo輸出: Doing foo.
?>

超全局變量

php提供了很多預(yù)定義的變量责球,用于提供大量與環(huán)境有關(guān)的信息。

  1. $_SERVER 服務(wù)器變量,該全局變量包含著服務(wù)器和客戶端配置及當(dāng)前請求環(huán)境的有關(guān)信息雏逾。
    print_r ($_SERVER)
    $_SERVER['SERVER_NAME']:當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名
    $_SERVER['REMOTE_ADDR'] :客戶端IP地址
    $_SERVER['REQUEST_URI']:URL的路徑部分
    $_SERVER['HTTP_USER_AGENT'] :操作系統(tǒng)和瀏覽器的有關(guān)信息

  2. $_GET 該變量包含使用GET方法傳遞的有關(guān)信息

  3. $_POST 該變量包含使用POST方法傳遞的參數(shù)的有關(guān)信息嘉裤。

  4. $_REQUEST 該變量記錄著通過各種輸入方法傳遞給腳本的變量,如GET栖博、POST屑宠,但不要用這個(gè)超級全局變量,因?yàn)樗话踩宜俣缺容^慢仇让。

  5. $_COOKIE cookie變量數(shù)組

  6. $_SESSION 會(huì)話變量數(shù)組

  7. $_FILES 與上傳文件有關(guān)的變量數(shù)組

  8. $_ENV 環(huán)境變量數(shù)組

  9. $GLOBALS 所有全局變量數(shù)組

empty()函數(shù)

empty()函數(shù)是用來測試變量是否已經(jīng)配置典奉,判斷值為否為空

若變量已存在丧叽、非空字符串或者非零卫玖,則返回 false 值;反之返回 true值踊淳。所以假瞬,當(dāng)字符串的值為0時(shí),也返回true嚣崭,就是執(zhí)行empty內(nèi)部的語句笨触。這就是陷阱懦傍。0為空雹舀。
如: 假設(shè) $value = 0; 則empty($value)=false

isset()函數(shù)

isset()函數(shù) 一般用來檢測變量是否設(shè)置.若變量不存在則返回 FALSE。

****若變量存在且其值為NULL粗俱,也返回 FALSE说榆。若變量存在且值不為NULL,則返回 TURE寸认。
簡單來說就是签财,有值返回true,沒有值返回false偏塞,0不是空唱蒸,0也是表示有值

使用 unset() 釋放變量之后,它將不再是 isset()灸叼。
PHP函數(shù)isset()只能用于變量神汹,傳遞任何其它參數(shù)都將造成解析錯(cuò)誤。

常量

什么是常量古今?

常量可以理解為值不變的量(如圓周率)屁魏。或者是常量值被定義后捉腥,在腳本的其他任何地方都不可以被改變氓拼。php中的常量分為自定義常量和系統(tǒng)常量。

自定義常量是根據(jù)我們開發(fā)的需要,而定義的常量桃漾,它通過使用PHP中的函數(shù)define()定義坏匪。

define()函數(shù)的語法格式為:

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有3個(gè)參數(shù):
第一個(gè)參數(shù)“constant_name”為必選參數(shù),常量名稱,即標(biāo)志符撬统,常量的命名規(guī)則與變量的一致剥槐,但是要注意哦,它可不帶美元符號(hào)哦宪摧。
第二個(gè)參數(shù)“value”為必選參數(shù)粒竖,它是常量的值。
第三個(gè)參數(shù)“case_sensitive”為可選參數(shù)几于,指定是否大小寫敏感蕊苗,設(shè)定為true表示不敏感,一般不指定第三個(gè)參數(shù)的情況下沿彭,默認(rèn)第三個(gè)參數(shù)的值為false朽砰。

(注: string表示參數(shù)類型為字符串類型,mixed表示參數(shù)類型可以接受為多種不同的類型喉刘,case_sensitive = true表示默認(rèn)為布爾類型TRUE)
(通常常量都全用大寫)

//舉個(gè)栗子瞧柔,將圓周率定義為常量“PI”
<?php
$p = "PII";
define("PI",3.14);
define($p,3.14);
echo PI;                  //3.14
echo "<br/>";
echo PII;                //3.14
?>

常量的作用
常量主要功效是可以避免重復(fù)定義,篡改變量值睦裳。在我們進(jìn)行團(tuán)隊(duì)開發(fā)時(shí)造锅,或者代碼量很大的時(shí)候,對于一些第一次定義后不改變的量廉邑,如果我們使用變量哥蔚,在不知情的情況下,使用同一變量名時(shí)蛛蒙,變量值就會(huì)被替換掉糙箍,從而會(huì)引發(fā)服務(wù)器執(zhí)行錯(cuò)誤的任務(wù)。

此外牵祟,使用常量還能提高代碼的可維護(hù)性深夯。如果由于某些原因,常量的值需要變更時(shí)候诺苹,我們只需要修改一個(gè)地方咕晋。例如在做計(jì)算中,起初我們?nèi)A周率為3.14筝尾,于是很多計(jì)算中我們都使用3.14進(jìn)行計(jì)算捡需,當(dāng)要求計(jì)算精度提高,圓周率需要取3.142的時(shí)候筹淫,我們不得不修改所有使用3.14的代碼站辉,倘若代碼量比較多時(shí)呢撞,不僅工作量大,還可能遺漏饰剥。

<?php
define("PI",3.14);
$r=3;
echo "面積為:".(PI*$r*$r)."<br/>";
echo "周長為:".(2*PI*$r)."<br/>";
?>

系統(tǒng)常量

系統(tǒng)常量是php已經(jīng)定義好的常量殊霞,我們可以直接拿來使用,常見的系統(tǒng)常量有:

  1. __FILE__ :php程序文件名汰蓉。它可以幫助我們獲取當(dāng)前文件在服務(wù)器的物理位置绷蹲。
  2. __LINE__ :PHP程序文件行數(shù)。它可以告訴我們顾孽,當(dāng)前代碼在第幾行祝钢。
  3. PHP_VERSION:當(dāng)前解析器的版本號(hào)。它可以告訴我們當(dāng)前PHP解析器的版本號(hào)若厚,我們可以提前知道我們的PHP代碼是否可被該P(yáng)HP解析器解析拦英。
  4. PHP_OS:執(zhí)行當(dāng)前PHP版本的操作系統(tǒng)名稱。它可以告訴我們服務(wù)器所用的操作系統(tǒng)名稱测秸,我們可以根據(jù)該操作系統(tǒng)優(yōu)化我們的代碼疤估。
<?php
echo _FILE_;
echo _LINE_;
echo PHP_VERSION;
echo PHP_OS;
?>

常量如何取值

獲取常量值的有兩種方法取值。第一種是使用常量名直接獲取值霎冯;例如計(jì)算圓周率的面積铃拇,如下(“*”是運(yùn)算符,相當(dāng)于乘號(hào)沈撞,后面部分的小節(jié)會(huì)介紹):

<?php
define("PI",3.14);
$r=1;
$area =**PI***$r*$r;                      //計(jì)算圓的面積
?>

第二種是使用constant()函數(shù)慷荔。它和直接使用常量名輸出的效果是一樣的,但函數(shù)可以動(dòng)態(tài)的輸出不同的常量关串,在使用上要靈活拧廊、方便,其語法格式如下:

mixed constant(string constant_name)

第一個(gè)參數(shù)constant_name為要獲取常量的名稱晋修,也可為存儲(chǔ)常量名的變量。如果成功則返回常量的值凰盔,失敗則提示錯(cuò)誤信息常量沒有被定義墓卦。(注:mixed表示函數(shù)返回值類型為多種不同的類型,string表示參數(shù)類型為字符串類型)
//舉個(gè)栗子:

<?php
$p="";
//定義圓周率的兩種取值
define("PI1",3.14);
define("PI2",3.142);
//定義值的精度
$height = "中";
//根據(jù)精度返回常量名户敬,將常量變成了一個(gè)可變的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area= constant($p)*$r*$r;
echo $area;
?>

如何判斷常量是否被定義

如果常量被重復(fù)定義以后落剪,PHP解析器會(huì)發(fā)出“Constant XXX already defined”的警告,提醒我們該常量已經(jīng)被定義過尿庐。那么忠怖,在團(tuán)隊(duì)開發(fā),或代碼量很大的情況下抄瑟,我們?nèi)绾稳ヅ卸ㄒ粋€(gè)常量是否被定義呢凡泣?
defined()函數(shù)可以幫助我們判斷一個(gè)常量是否已經(jīng)定義,其語法格式為:

bool defined(string constants_name)```
它只有參數(shù)constant_name,指的是要獲取常量的名稱鞋拟,若存在則返回布爾類型true骂维,否則返回布爾類型false; (注:bool表示函數(shù)返回值類型為布爾類型)

<?php
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1); //bool(true)
var_dump($is2); //bool(false)
?>


# 內(nèi)置常量
`PHP_OS`      php所在操作系統(tǒng)的名稱
`PHP_VERSION`  當(dāng)前的php的版本號(hào)
魔術(shù)常量(下面都是兩個(gè)下劃線額)
`__LINE__`   文件中的當(dāng)前行號(hào)
`__FILE__`    文件的完整路徑和文件名
`__FUNCTION__`  函數(shù)名稱
`__CLASS__`   類的名稱
`__METHOD__`   類的方法名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贺纲,隨后出現(xiàn)的幾起案子航闺,更是在濱河造成了極大的恐慌,老刑警劉巖猴誊,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潦刃,死亡現(xiàn)場離奇詭異,居然都是意外死亡懈叹,警方通過查閱死者的電腦和手機(jī)福铅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來项阴,“玉大人滑黔,你說我怎么就攤上這事』防浚” “怎么了略荡?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歉胶。 經(jīng)常有香客問我汛兜,道長,這世上最難降的妖魔是什么通今? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任粥谬,我火速辦了婚禮,結(jié)果婚禮上辫塌,老公的妹妹穿的比我還像新娘漏策。我一直安慰自己,他們只是感情好臼氨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布掺喻。 她就那樣靜靜地躺著,像睡著了一般储矩。 火紅的嫁衣襯著肌膚如雪感耙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天持隧,我揣著相機(jī)與錄音即硼,去河邊找鬼。 笑死屡拨,一個(gè)胖子當(dāng)著我的面吹牛只酥,可吹牛的內(nèi)容都是我干的褥实。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼层皱,長吁一口氣:“原來是場噩夢啊……” “哼性锭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叫胖,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤草冈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓮增,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怎棱,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年绷跑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拳恋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砸捏,死狀恐怖谬运,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垦藏,我是刑警寧澤梆暖,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站掂骏,受9級特大地震影響轰驳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弟灼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一级解、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧田绑,春花似錦勤哗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昙篙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诱咏,已是汗流浹背苔可。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袋狞,地道東北人焚辅。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓映屋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親同蜻。 傳聞我的和親對象是個(gè)殘疾皇子棚点,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容