一、php可以做什么
php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。
php是一門后臺編程語言,是目前比較主流的后臺編程語言。
認識一下PHP及其功能。
1、運行在服務器端:學會了PHP,就可以指揮服務器給你干活,甚至是搞破壞^_^(千萬不能真這么做咯),WEB網站的大部分數據都是存儲在服務器端的,PHP就是用來處理這些存儲在服務器的數據的(功能強大吧)。
2、跨平臺:服務器可以是多種平臺的服務器,比如Linux、Windows、Unix,你都可以指揮(不用怕只能指揮一種服務器啦吧)。
3、腳本語言:它是通過編寫腳本,也就是一行行的計算機指令(也可以理解為特定的英文單詞),來指揮服務器來工作的,因此,在編寫PHP的過程其實就是與老外(服務器成老外啦)交流的過程,交流的語言就是PHP。
4、免費:免費使用(天下還真有免費的午餐)。
如果出現亂碼,解決亂碼需要加head頭:header("Content-type:text/html;charset=utf-8");
認識PHP代碼標識
想在頁面中編寫PHP?代碼非常容易,如下面代碼:
<?php
? ? ? echo "想學習php嗎?來慕課網吧";
?>
就像你可以編寫JavaScript腳本語言需要寫在<script></script>標簽之間一樣,你可以在頁面中編寫PHP代碼寫在<?php ??>標簽之間,但注意后面的?>是可以省略的。
輸出php的版本 ? ?echo ? ?PHP_VERSION
輸出運行php的系統名稱? ? echo ? ?PHP_OS
查看php環境的函數? ? ? echo ? ?phpinfo()
阻止程序執行die,一般用來做調試
//die;
//@die($a);
阻止程序執行exit,一般用來做調試
//exit();
//@exit($a);
php主要輸出方式的區別:
1、echo
echo() 實際上不是一個函數,是php語句,因此您無需對其使用括號。不過,如果您希望向 echo() 傳遞一個以上的參數,
那么使用括號會發生解析錯誤。而且echo是返回void的,并不返回值,所以不能使用它來賦值。
<?php
$a = echo("words"); // 錯誤!不能用來賦值
echo ?"words"; // 55nav
echo ?("words"); // 55nav
echo ? ("apple","bear"); //發生錯誤,有括號不能傳遞多個參數
echo ? ?"alice","bill","cart", "daring";? // 不用括號的時候可以用逗號隔開多個值, 會輸出alicebillcartdaring? 不管是否換行,最終顯示都是為一行
$fistname="alice";
echo "$fistname com"; // 如果 $firstname = "alice", 則會輸出 alice com.
echo '$firstname com'; // 由于使用單引號,所以不會輸出$firstname的值,而是輸出 $firstname com
?>
2.print_r 函數
print_r函數打印關于變量的易于理解的信息。
如果變量是string , integer or float , 將會直接輸出其值,如果變量是一個數組,則會輸出一個格式化后的數組,便于閱讀,也就是有key和value對應的那種格式。對于object對象類同。print_r有兩個參數,第一個是變量,第二個可設為true,如果設為true,則會返回字符串,否則返回布爾值TRUE。
<?php
print_r($arr);//直接打印數組$arr
$a="alice";
$c=print_r($a);
echo ?$c;//$c的值是TRUE
$c=print_r($a,true);
echo ? ? ? $c; ? ? ? ? ? //$c的值是字符串alice
?>
3.var_dump函數
功能: 輸出變量的內容、類型或字符串的內容、類型、長度。常用來調試。
var_dump($a);
二、php中的echo語句
echo是PHP中的輸出語句,可以把字符串輸出(字符串用雙引號括起來)。
注意echo關鍵字與字符串之間至少要有一個空格。
<?php echo "hello world!";?>
PHP-計算表達式
不同于HTML和CSS,在php中我們可以做計算,比如我們寫入echo 12*3計算機會計算出結果36。如下代碼:
<?php echo 12*3;?>
PHP-字符串
一個字符串是用雙引號括起來的一個詞或一個句字,你可以用PHP語言輸出把這個字符串輸出,像這樣:
<?php echo "hello world!";?>
也可以用單引號括起來.
可以把兩個字符用連接符連接起來,像這樣:
<?php echo "Hi,"."imooc!";?>
連接符可以連接多個字符串,上面的例子就是把一個字符串拆分為二個小字符串,然后用一個連接符連起來。在php中字符串連接符是用點(.)來表示的,這一點比較特殊,其它語言中是用加號(+)來表示的,比如:JavaScirpt、Asp、C。
PHP語句結束符
有的小伙伴們是不是已經注意在每一條PHP代碼行結尾處都會有一個分號;。對的,這點注意,在PHP編程中需要在每條語句的末尾加入分號;。但要注意,分號;一定在半角狀態下輸入噢。
注釋
在PHP中也有注釋語句:用雙斜杠(//)來表示。其它語言中,Html中使用,CSS中使用/*注釋語句*/
注釋語句可以在PHP程序的任意位置(但注釋語句一定要寫在之間)。
三、變量
1.什么是變量
變量是用于存儲值的,我們命令服務器去干活的時候,往往需要產生一些數據,需要臨時性存放起來,方便取用。我們也可以理解為,變量就像一個購物袋,我們可以用來裝蘋果、榴蓮(當然也可以用來裝玫瑰),需要注意的是,一般情況下一個變量只能裝一個(不要太貪心)值,除非是復合變量(后面變量類型時會介紹),當我們放進去一個蘋果后,再放進榴蓮的時候,蘋果就被替換掉,再放入香蕉,那么榴蓮就被替換了。
2.如何定義變量
定義變量就是向服務器的內存申請空間,用來存儲數據。這時候我們就需要用到變量名和變量值.
<?php
$var _name = "蘋果";
$n = 10;
?>
解釋一下,在“=”左邊的是變量名,右邊的是變量值。完成定義變量后,需要一個;告訴服務器這行指令已經結束。其中變量名必須通過$符號標識,“=”可不是我們平常所說的等號哦,在PHP中,=是賦值運算符;在這里,var_name是變量名,“蘋果”是變量值,它是一個字符串;n是變量名,10是變量值,它是一個整型。
3.變量名的命名規則
變量名除了需要“$”進行標識外,還有一些規則需要遵守。變量名的命名規則主要有三條:
①變量名必須以字母或下劃線“-”開頭,數字不能開頭。如”$_name”,”$name” ,”$name2”等
②變量名只能由字母、數字、以及“_”組成,還能包含漢字。如”$_qq”,”$qq308” ,”$my_apple”,“比如"$name我等”,但是”$name*”是不對的。
③變量名不允許包含空格。當變量名由多個單詞組成,建議使用下劃線“-”進分隔比如 $my_apple),俗稱下劃線法,或者以大寫字母開頭比如 $myApple,俗稱駱駝式命名法(也稱駝峰命名法)。
特別需要注意的是,在PHP中變量名是區分大小寫的,如“$my_book”與“$my_Book”代表兩個不同的變量。
4.變量的數據類型
在變量中,由于變量占用的空間單元不一樣(占的地盤大小不一樣),也分成幾種數據類型。
我們可以通過使用“memory_get_usage”獲取當前PHP消耗的內存。
可以對比一下內存消耗
<?php
echo $m1 = memory_get_usage(); //初始化消耗內存
echo "<br/>";
$var_string = "123";
echo $m2 = memory_get_usage()-$m1; //字符串消耗內存
echo "<br/>";?
$n=123;
echo $m3 = memory_get_usage()-$m1-$m2; //整型消耗內存
echo "<br/>";?
$f=123.00;
echo $m4 = memory_get_usage()-$m1-$m2-$m3;//浮點型消耗內存?
echo "<br/>";?
$var_array = array("123");
echo $m5 = memory_get_usage()-$m1-$m2-$m3-$m4; //數組消耗內存
?>
gettype()返回變量的類型,共有8個可能的值string、integer、float、boolean、array、object、null、unknown
is_type()查看變量是否屬于某個類型,如果是,返回TRUE,否則,返回FALSE
$arr = array(1);
echo is_array($arr);
$num = 5;
echo is_int($num);
is_array -- 檢測變量是否是數組
is_bool --? 檢測變量是否是布爾型
is_callable --? 檢測參數是否為合法的可調用結構
is_double -- is_float() 的別名
is_float -- 檢測變量是否是浮點型
is_int -- 檢測變量是否是整數
is_integer -- is_int() 的別名
is_long -- is_int() 的別名
is_null --? 檢測變量是否為 NULL
is_numeric --? 檢測變量是否為數字或數字字符串
is_object -- 檢測變量是否是一個對象
is_real -- is_float() 的別名
is_resource --? 檢測變量是否為資源類型
is_scalar --? 檢測變量是否是一個標量
is_string -- 檢測變量是否是字符串
var_dump()獲取變量的值和類型的詳細信息
$str = ‘hello’;
var_dump($str);
$arr = array(‘A’, ‘B’, ‘C’);
var_dump($arr);
在php中,支持8種原始類型,其中包括四種標量類型、兩種復合類型和兩種特殊類型。php是一門松散類型的語言,不必向php聲明變量的數據類型。php會自動把變量轉換為自動的數據類型。
<?php
$string="就是就是"; //定義一個字符串“就是就是”
var_dump($string);?
echo "<br/>";
$string="9494";//把它變成整型“9494”
var_dump($string); //通過“var_dump”函數,輸出數據類型
?echo "<br/>";
?>
輸出結果:string(12) "就是就是" ? ? ? ? ? ? ? int(9494)
我們可以發現, 這個變量自動就從原來的字符串轉換成了整型咯。
5.PHP標量類型—布爾類型
布爾類型(boolean):只有兩個值,一個是TRUE,另一個是FALSE,可以理解為是或否。它不區分大小寫。主要用在條件結構中。需要注意的是,當我們用echo指令輸出布爾類型時,如果是true則輸出的是1,false則什么也不輸出。我們可以使用var_dump函數,獲取它真正的數據類型。
6.PHP標量類型—整型
整型(integer):類似于常見的整數。它可以用十進制、八進制、十六進制指定。十進制就是日常使用的數字;八進制,數字前必須加上“0”(阿拉伯數字0);十六進制,數字前必須加“0x”(阿拉伯數字0)。如:
<?php
$data_int = 1234;? // 十進制數
$data_int = -567;? ? // 一個負數
$data_int = 0123;? ? // 八進制數(等于十進制的 83)
$data_int = 0x1a;? ? // 十六進制數(等于十進制的 26)
?>
7.PHP標量類型—浮點型
浮點型(浮點數、雙精度數或實數),也就是通常說的小數,可以用小數點或者科學計數法表示。科學計數法可以使用小寫的e,也可以使用大寫的E。
<?php
echo $num_float1 = 1.234;? ? //小數點,輸出結果1.234
echo $num_float2 = 1.2e3;? ? //科學計數法,小寫e,輸出結果1200
echo $num_float3 = 7.0E-3;? ? //科學計數法,大寫E,輸出結果0.007
?>
8.PHP標量類型—字符串
字符串是由一系列字符組成,在PHP中,字符和字節一樣,也就是說,一共有256種不同字符的可能性。
字符串型可以用三種方法定義:單引號形式、雙引號形式和Heredoc結構形式。
<?php
$str_string1='我是字符串1';
$str_string2="我是字符串2";
echo $str_string1;
echo "<br/>";
echo $str_string2;
?>
當你的字符串中包含引號的時候,我們怎么辦?
<?php
$str_string1 = '甲問:"你在哪里學的PHP?"'; ? ? ? //單引號中嵌入雙引號
$str_string2 = "乙毫不猶豫地回答:'當然是慕課網咯!'"; ? ? ?//雙引號中嵌入單引號
$str_string3 = '甲問:\'能告訴我網址嗎?\'';? ? ? ? ? ? //單引號中嵌入單引號,使用轉義符“\”
$str_string4 = "乙答道:\"www.imooc.com\"";? ? ? ? //雙引號中嵌入雙引號,使用轉義符“\”
echo $str_string1;
echo $str_string2;
echo $str_string3;
echo $str_string4;
?>
當引號遇到美元咋辦?這里的美元可不是真正的美元,而是用美元符號標識的變量。
字符串轉義
\n ? ? ? ?換行
\r ? ? ? ? ?回車
\t ? ? ? ? ?水平制表符,tab鍵
\\ ? ? ? ? ? 反斜杠
\$ ? ? ? ? ?美元符
\” ? ? ? ? ? 雙引號
當雙引號中包含變量時,變量會與雙引號中的內容連接在一起;雙引號可以解析變量,如果想明確的指定名字的結束,可以用花括號{ }把變量名括起來。echo "He drank some {$beer}s";
當單引號中包含變量時,變量會被當做字符串輸出。
<?php
$love = "I love you!";?
$string1 = "慕課網,$love";
$string2 = '慕課網,$love';
echo $string1; ? ? ? ? ? ? ? ? ? ?//輸出:慕課網,I ?love you!
echo "<br/>";
echo $string2; ? ? ? ? ? ? ? ? ? ?//輸出:慕課網,$love
?>
當我的字符串很長怎么辦?
我們可以使用Heredoc結構形式的方法來解決該問題,首先使用定界符表示字符串(<<<),接著在“<<<“之后提供一個標識符GOD,然后是字符串,最后以提供的這個標識符結束字符串。
<?php
$string1=<<<GOD
我有一只小毛驢,我從來也不騎。
有一天我心血來潮,騎著去趕集。
我手里拿著小皮鞭,我心里正得意。
不知怎么嘩啦啦啦啦,我摔了一身泥.
GOD;
echo $string1;
?>
在賦值符號后,輸入定界符“<<<”,接著是標識符,你可以用你的女神作為標識符“GOD”,如第2行,也可以使用你喜歡的狗狗,“DOG”作為標識符,但是,結尾處的標識符也必須是一樣的。此外,在結尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”號結束之外,不能有任何其他字符,前后都不能有,包括空格,否則會出現錯誤的哦。切記切記哦。
定界符也可以解析變量,如果想明確的指定名字的結束,可以用花括號{ }把變量名括起來。
9.PHP第一種特殊類型—資源
資源(resource):資源是由專門的函數來建立和使用的,例如打開文件、數據連接、圖形畫布。我們可以對資源進行操作(創建、使用和釋放)。任何資源,在不需要的時候應該被及時釋放。如果我們忘記了釋放資源,系統自動啟用垃圾回收機制,在頁面執行完畢之后回收資源,以避免內存被消耗殆盡。
<?php
$file=fopen("f.txt","r");? //打開文件
$con=mysql_connect("localhost","root","root");? //連接數據庫
$img=imagecreate(100,100);//圖形畫布
?>
//偷窺一個小文件,假設服務器上有個文件為“f.txt”,這時候,我們就需要用到資源這種特殊的數據類型。
<?php
//首先采用“fopen”函數打開文件,得到返回值的就是資源類型。
$file_handle = fopen("/data/webroot/resource/php/f.txt","r");
if ($file_handle){? ?
?//接著采用while循環(后面語言結構語句中的循環結構會詳細介紹)一行行地讀取文件,然后輸出每行的文字? ??
while (!feof($file_handle)) { //判斷是否到最后一行? ? ? ?
?$line = fgets($file_handle); //讀取一行文本? ? ??
? echo $line; //輸出一行文本? ? ? ??
echo "<br/>"; //換行??
? }
}
fclose($file_handle);//關閉文件?>
file handle叫做文件句柄。
在文件I/O中,要從一個文件讀取數據,應用程序首先要調用操作系統函數并傳送文件名,并選一個到該文件的路徑來打開文件。該函數取回一個順序號,即文件句柄(file handle),該文件句柄對于打開的文件是唯一的識別依據。要從文件中讀取一塊數據,應用程序需要調用函數ReadFile,并將文件句柄在內存中的地址和要拷貝的字節數傳送給操作系統。當完成任務后,再通過調用系統函數來關閉該文件。
fopen() 函數打開文件或者 URL。
如果打開失敗,本函數返回 FALSE。
語法:fopen(filename,mode,include_path,context)
filename必需。規定要打開的文件或 URL。
mode必需。規定要求到該文件/流的訪問類型。可能的值見下表。
include_path可選。如果也需要在 include_path 中檢索文件的話,可以將該參數設為 1 或 TRUE。
context可選。規定文件句柄的環境。Context 是可以修改流的行為的一套選項。
mode 參數的可能的值:
"r"只讀方式打開,將文件指針指向文件頭。
"r+"讀寫方式打開,將文件指針指向文件頭。
"w"寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建之。
"w+"讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建之。
"a"寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
"a+"讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
"x"創建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。
這和給底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。
此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。
"x+"創建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。
這和給底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。
此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。
注釋:不同的操作系統家族具有不同的行結束習慣。當寫入一個文本文件并想插入一個新行時,需要使用符合操作系統的行結束符號。基于 Unix 的系統使用 \n 作為行結束字符,基于 Windows 的系統使用 \r\n 作為行結束字符,基于 Macintosh 的系統使用 \r 作為行結束字符。 如果寫入文件時使用了錯誤的行結束符號,則其它應用程序打開這些文件時可能會表現得很怪異。
Windows 下提供了一個文本轉換標記("t")可以透明地將 \n 轉換為 \r\n。與此對應還可以使用 "b" 來強制使用二進制模式,這樣就不會轉換數據。要使用這些標記,要么用 "b" 或者用 "t" 作為 mode 參數的最后一個字符。
默認的轉換模式依賴于 SAPI 和所使用的 PHP 版本,因此為了便于移植鼓勵總是指定恰當的標記。如果是操作純文本文件并在腳本中使用了
\n 作為行結束符,但還要期望這些文件可以被其它應用程序例如 Notepad 讀取,則在 mode 中使用 "t"。在所有其它情況下使用
"b"。
在操作二進制文件時如果沒有指定 "b" 標記,可能會碰到一些奇怪的問題,包括壞掉的圖片文件以及關于 \r\n 字符的奇怪問題。
注釋:為移植性考慮,強烈建議在用 fopen() 打開文件時總是使用 "b" 標記。
注釋:再一次,為移植性考慮,強烈建議你重寫那些依賴于 "t" 模式的代碼使其使用正確的行結束符并改成 "b" 模式。
feof(fp) 函數檢測是否已到達文件末尾 (eof)。
有兩個返回值:如果遇到文件結束,函數feof(fp)的值為非零值,否則為0。
fgets() 函數從文件指針中讀取一行。
語法:fgets(file,length)
file必需。規定要讀取的文件。
length可選。規定要讀取的字節數。默認是 1024 字節。
從file指向的文件中讀取一行并返回長度最多為length- 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了length- 1 字節后停止(要看先碰到那一種情況)。如果沒有指定length,則默認為 1K,或者說 1024 字節。若失敗,則返回 false。
注釋:length參數從 PHP 4.2.0 起成為可選項,如果忽略,則行的長度被假定為 1024 字節。從 PHP 4.3 開始,忽略掉length將繼續從流中讀取數據直到行結束。如果文件中的大多數行都大于 8 KB,則在腳本中指定最大行的長度在利用資源上更為有效。
注釋:從 PHP 4.3 開始本函數可以安全用于二進制文件。早期的版本則不行。
注釋:如果碰到 PHP 在讀取文件時不能識別 Macintosh 文件的行結束符,可以激活 auto_detect_line_endings 運行時配置選項。
fgetss() 函數從打開的文件中讀取一行并過濾掉 HTML 和 PHP 標記。與fgets()相同,不同的是 fgetss 嘗試從讀取的文本中去掉任何 HTML 和 PHP 標記。
語法:fgetss(file,length,tags)
file必需。規定要讀取的文件。
length可選。規定要讀取的字節數。默認是 1024 字節。該參數在 PHP 5 之前是必需的。
tags可選。規定不會被刪除的標簽。
可以用可選的第三個參數tags指定哪些標記不被去掉。若失敗,則返回 false。
<?php
$file = fopen("test.htm","r");
echo fgetss($file,1024,"<p>,<b>");
fclose($file);
?>
fclose() 函數關閉一個打開文件。
語法:fclose(file)
file必需。規定要關閉的文件。
file參數是一個文件指針。fclose() 函數關閉該指針指向的文件。如果成功則返回 true,否則返回 false。文件指針必須有效,并且是通過 fopen() 或 fsockopen() 成功打開的。
10、PHP第二種特殊類型—空類型
NULL(NULL):NULL是空類型,對大小寫不敏感,NULL類型只有一個取值,表示一個變量沒有值,當被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認為為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 = "節日快樂!";
unset($var3); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //將變量$var3注銷定義
var_dump($var3);? ? ? ? ? ? ? ? ? ? //NULL
?>
11.超全局變量
php提供了很多預定義的變量,用于提供大量與環境有關的信息。
(1)$_SERVER服務器變量,該全局變量包含著服務器和客戶端配置及當前請求環境的有關信息。
print_r ?($_SERVER)
$_SERVER['SERVER_NAME']:當前運行腳本所在的服務器的主機名
$_SERVER['REMOTE_ADDR'] :客戶端IP地址
$_SERVER['REQUEST_URI']:URL的路徑部分
$_SERVER['HTTP_USER_AGENT'] :操作系統和瀏覽器的有關信息
(2)$_GET ?該變量包含使用GET方法傳遞的有關信息
(3)$_POST該變量包含使用POST方法傳遞的參數的有關信息。
(4)$_REQUEST該變量記錄著通過各種輸入方法傳遞給腳本的變量,如GET、POST,但不要用這個超級全局變量,因為它不安全而且速度比較慢。
(5)$_COOKIE ? ?cookie變量數組
(6)$_SESSION ? 會話變量數組
(7)$_FILES ?與上傳文件有關的變量數組
(8)$_ENV ? ?環境變量數組
(9)$GLOBALS ?所有全局變量數組
12.empty()函數
empty()函數是用來測試變量是否已經配置,判斷值為否為空。若變量已存在、非空字符串或者非零,則返回 false 值;反之返回 true值。所以,當字符串的值為0時,也返回true,就是執行empty內部的語句。這就是陷阱。0為空。
如: 假設 $value = 0; 則empty($value)=false
13.isset()函數
isset()函數 一般用來檢測變量是否設置.若變量不存在則返回 FALSE。若變量存在且其值為NULL,也返回 FALSE。若變量存在且值不為NULL,則返回 TURE。
簡單來說就是,有值返回true,沒有值返回false,0不是空,0也是表示有值
使用 unset() 釋放變量之后,它將不再是 isset()。
PHP函數isset()只能用于變量,傳遞任何其它參數都將造成解析錯誤。
四、常量
什么是常量?常量可以理解為值不變的量(如圓周率)。或者是常量值被定義后,在腳本的其他任何地方都不可以被改變。php中的常量分為自定義常量和系統常量。
自定義常量是根據我們開發的需要,而定義的常量,它通過使用PHP中的函數define()定義。
define()函數的語法格式為:
bool define(string $constant_name, mixed $value[, $case_sensitive = true])
它有3個參數:
第一個參數“constant_name”為必選參數,常量名稱,即標志符,常量的命名規則與變量的一致,但是要注意哦,它可不帶美元符號哦。第二個參數“value”為必選參數,它是常量的值。第三個參數“case_sensitive”為可選參數,指定是否大小寫敏感,設定為true表示不敏感,一般不指定第三個參數的情況下,默認第三個參數的值為false。
(注: string表示參數類型為字符串類型,mixed表示參數類型可以接受為多種不同的類型,case_sensitive = true表示默認為布爾類型TRUE)
(通常常量都全用大寫)
//舉個栗子,將圓周率定義為常量“PI”
<?php
$p = "PII";
define("PI",3.14);
define($p,3.14);
echo PI; ? ? ? ? ? ? ? ? ?//3.14
echo "<br/>";
echo PII; ? ? ? ? ? ? ? ?//3.14
?>
常量的作用
常量主要功效是可以避免重復定義,篡改變量值。在我們進行團隊開發時,或者代碼量很大的時候,對于一些第一次定義后不改變的量,如果我們使用變量,在不知情的情況下,使用同一變量名時,變量值就會被替換掉,從而會引發服務器執行錯誤的任務。
此外,使用常量還能提高代碼的可維護性。如果由于某些原因,常量的值需要變更時候,我們只需要修改一個地方。例如在做計算中,起初我們取圓周率為3.14,于是很多計算中我們都使用3.14進行計算,當要求計算精度提高,圓周率需要取3.142的時候,我們不得不修改所有使用3.14的代碼,倘若代碼量比較多時,不僅工作量大,還可能遺漏。
<?php
define("PI",3.14);
$r=3;
echo "面積為:".(PI*$r*$r)."<br/>";
echo "周長為:".(2*PI*$r)."<br/>";
?>
系統常量
系統常量是php已經定義好的常量,我們可以直接拿來使用,常見的系統常量有:
(1)__FILE__ :php程序文件名。它可以幫助我們獲取當前文件在服務器的物理位置。
(2)__LINE__ :PHP程序文件行數。它可以告訴我們,當前代碼在第幾行。
(3)PHP_VERSION:當前解析器的版本號。它可以告訴我們當前PHP解析器的版本號,我們可以提前知道我們的PHP代碼是否可被該PHP解析器解析。
(4)PHP_OS:執行當前PHP版本的操作系統名稱。它可以告訴我們服務器所用的操作系統名稱,我們可以根據該操作系統優化我們的代碼。
<?php
echo _FILE_;
echo _LINE_;
echo PHP_VERSION;
echo PHP_OS;
?>
常量如何取值
獲取常量值的有兩種方法取值。第一種是使用常量名直接獲取值;例如計算圓周率的面積,如下(“*”是運算符,相當于乘號,后面部分的小節會介紹):
<?php
define("PI",3.14);
$r=1;
$area =PI*$r*$r; ? ? ? ? ? ? ? ? ? ? ?//計算圓的面積
?>
第二種是使用constant()函數。它和直接使用常量名輸出的效果是一樣的,但函數可以動態的輸出不同的常量,在使用上要靈活、方便,其語法格式如下:
mixed constant(string constant_name)
第一個參數constant_name為要獲取常量的名稱,也可為存儲常量名的變量。如果成功則返回常量的值,失敗則提示錯誤信息常量沒有被定義。(注:mixed表示函數返回值類型為多種不同的類型,string表示參數類型為字符串類型)
//舉個栗子:
<?php
$p="";
//定義圓周率的兩種取值
define("PI1",3.14);
define("PI2",3.142);
//定義值的精度
$height = "中";
//根據精度返回常量名,將常量變成了一個可變的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area= constant($p)*$r*$r;
echo $area;
?>
如何判斷常量是否被定義
如果常量被重復定義以后,PHP解析器會發出“Constant XXX already defined”的警告,提醒我們該常量已經被定義過。那么,在團隊開發,或代碼量很大的情況下,我們如何去判定一個常量是否被定義呢?
defined()函數可以幫助我們判斷一個常量是否已經定義,其語法格式為:
bool defined(string constants_name)
它只有參數constant_name,指的是要獲取常量的名稱,若存在則返回布爾類型true,否則返回布爾類型false; (注:bool表示函數返回值類型為布爾類型)
<?php
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1); ? ? ? ? ? //bool(true)
var_dump($is2); ? ? ? ? ? //bool(false)
?>
內置常量
PHP_OS ? ? ? php所在操作系統的名稱
PHP_VERSION ?當前的php的版本號
魔術常量(下面都是兩個下劃線額)
__LINE__ ? 文件中的當前行號
echo ? ? __LINE__;
__FILE__ ? ?文件的完整路徑和文件名
echo ? ?__FILE__;
__FUNCTION__ ? 函數名稱
function ? ?test(){
echo ? ? __FUNCTION__;
}
test();
__CLASS__ ? 類的名稱
__METHOD__ ? 類的方法名
class ? ? ?Test{
function ? ?test1(){
echo ? ?__CLASS__;
echo ? "<br/>";
echo ? ?__METHOD__;
}
}
$newTest=new ? ?Test();//將類實例化
$newTest->test1();//調用
五、php中常用的運算符
什么是運算符?運算符是告訴PHP做相關運算的標識符號。例如,你需要計算123乘以456等于多少,這時候就需要一個符號,告訴服務器,你需要做乘法運算。
PHP中的運算符有哪些?PHP運算符一般分為算術運算符、賦值運算符、比較運算符、三元運算符、邏輯運算符、字符串連接運算符、錯誤控制運算符。
算術運算符主要是用于進行算術運算的。
在php中的常用的算術運算符:+ ? ? ? - ? ? ?* ? ? ? ?/ ? ? ? %
賦值運算符
PHP的賦值運算符有兩種,分別是:
(1)“=”:把右邊表達式的值賦給左邊的運算數。它將右邊表達式值復制一份,交給左邊的運算數。換而言之,首先給左邊的運算數申請了一塊內存,然后把復制的值放到這個內存中。
(2)“&”:引用賦值,意味著兩個變量都指向同一個數據。它將使兩個變量共享一塊內存,如果這個內存存儲的數據變了,那么兩個變量的值都會發生變化。
<?php
$a = "我在慕課網學習PHP!";
$b = $a;
$c = &$a;
$a = "我不知道我在干嘛!";
echo $b."<br/>"; ? ? ? ? ? ? ? ? ? ? ? ?//我在慕課網學習PHP!
echo $c."<br/>"; ? ? ? ? ? ? ? ? ? ? ? ?//我不知道我在干嘛!
?>
比較運算符
比較運算符主要是用于進行比較運算的,例如:等于、全等、不等、大于、小于。
在PHP中常用的比較運算符:> ? ? ?< ? ? ? >= ? ? ?<= ? ? == ? ?!= ? ? ?=== ? ? !== ? ? <>(不等)
三元運算符
(“?:”)三元運算符也是一個比較運算符,對于表達式(expr1)?(expr2):(expr3),如果expr1的值為true,則此表達式的值為expr2,否則為expr3。
邏輯運算符
主用是進行邏輯運算的,例如:邏輯與、邏輯或、邏輯異或、邏輯非等,在PHP中常用的邏輯運算符如下表:
And(邏輯與) ? ? $a and $b ? ? ? ? 如果$a與$b都為TRUE,返回TRUE
Or(邏輯或) ? ? ? ? $a or $b? ? ? ? 如果$a或$b任一為TRUE,返回TRUE
Xor(邏輯異或) ? ? ?$a xor $b? ? ? ? 如果$a與$b有且僅有一個為TRUE,返回TRUE
Not(邏輯非) ? ? ? ? !$a ? ? ? ? ? ? ? ? ?如果$a不為TRUE,返回TRUE
And(邏輯與) ? ? $a && $b ? ? ? ? ? 如果$a與$b都為TRUE,返回TRUE
Or(邏輯或)? ? ? $a || $b? ? ? ? ? ? ? 如果$a或$b任一為TRUE,返回TRUE
“與”和“或”有兩種不同形式運算符的原因是它們運算的優先級
前三個邏輯運算符的優先級最低。
錯誤控制運算符
PHP中提供了一個錯誤控制運算符“@”,對于一些可能會在運行過程中出錯的表達式時,我們不希望出錯的時候給客戶顯示錯誤信息,這樣對用戶不友好。于是,可以將@放置在一個PHP表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉;
如果激活了track_error(這個玩意在php.ini中設置)特性,表達式所產生的任何錯誤信息都被存放在變量$php_errormsg中,此變量在每次出錯時都會被覆蓋,所以如果想用它的話必須盡早檢查。
需要注意的是:錯誤控制前綴“@”不會屏蔽解析錯誤的信息,不能把它放在函數或類的定義之前,也不能用于條件結構例如if和foreach等。
<?php
$conn = @mysql_connect("localhost","username","password");
echo "出錯了,錯誤原因是:".$php_errormsg;
?>
六、語言結構語句
1、順序結構
順序結構就像一條直線,按著順序一直往下執行。我們編寫的代碼默認都是按照順序結構執行的。
2.PHP條件結構之if…else…
條件結構就像一個岔路口,可以向左走,也可以向右走。
PHP中的“if…else…”語法,如下:
<?php
if(條件){
//分配服務器干的任務A
}else{
//分配服務器干的任務B
}
?>
3.PHP條件結構之if…else if…
PHP中的“if…else if…”語法,如下:
<?php
if(條件一){
//分配服務器干的任務A
}else if(條件二){
//分配服務器干的任務B
}
?>
通過條件一判斷,若返回值為布爾值為TRUE,則執行任務A,若返回值為FALSE,則判斷條件二,若返回值為布爾值TRUE,則執行任務B,否則既不執行任務A,也不執行任務B。服務器會繼續往下執行其他任務。
4.PHP條件結構之if…else if…else…
PHP中的“if…else if…else…”語法,如下:
<?php
if(條件一){
//分配服務器干的任務A
}else if(條件二){
//分配服務器干的任務B
}else{
//分配服務器干的任務C
}
?>
通過條件一判斷,若返回值為布爾值TRUE,則執行任務A,若返回值為FALSE,則判斷條件二,若返回值為布爾值TRUE,則執行任務B,否則既不執行任務A,也不執行任務B,執行任務C。
5、PHP條件結構之switch…case…
PHP中的“switch...case...”語法,如下:
<?php
switch (條件)
{
case 條件值一:
//任務一
break;
case 條件值二:
//任務二
break;
default:
//默認任務
}
?>
首先判斷條件,若條件的返回值為條件值一,則執行任務一,若條件返回的值為條件值二,則執行任務二,若條件的返回值既不是條件值一也不是條件值二,則執行默認任務。break的作用是結束switch(后面會有專門舉例說明),使用switch 語句可以避免冗長的 “if..else if..else”代碼塊。
break的作用是阻止代碼進入下一個case 中繼續執行。
6、PHP中循環結構之while循環語句
在PHP中,while循環語句如下:
<?php
while(條件){
//執行任務
}
?>
首先判斷某個條件是否符合(條件返回值是否為TRUE),若符合則執行任務,執行完畢任務,再判斷條件是否滿足要求,符合則重復執行此任務,否則結束任務。
7.PHP中循環結構之do while循環語句
語法如下:
<?php
do{
//執行任務
}while(條件)
?>
首先執行任務(上一節的while語句是先判斷條件是否成立,再執行任務),執行任務完畢,判斷某個條件是否符合(條件返回值是否為TRUE),若符合則再次執行任務,執行完畢任務,繼續判定條件。
while與do…while循環語句的區別是,while先判斷條件是否成立,后執行循環,do...while先執行一次任務,再判斷是否繼續執行循環,也就是說do...while至少會執行一次任務。當條件為FALSE時,while中的任務會一次也不執行,do...while中的任務會執行1次。
8、PHP中循環結構之for循環語句
for循環語句結構如下:
<?php
for(初始化;循環條件;遞增項){
//執行任務
}
?>
for 語句中,“初始化”在循環開始前無條件求值一次,“循環條件”在每次循環開始前求值。如果值為 TRUE,則繼續循環,執行循環體語句(執行任務)。如果值為 FALSE,則終止循環。“遞增項”在每次循環之后被求值(執行)。其常用于循環執行代碼塊指定的次數。
9、PHP中循環結構之foreach循環語句
在PHP中foreach循環語句,常用于遍歷數組,一般有兩種使用方式:不取下標、取下標。
(1)只取值,不取下標
<?php
foreach (數組 ? as ? ?值){
//執行的任務
}
?>
(2)同時取下標和值
<?php
foreach (數組 ? ?as ? ?下標 => 值){?
//執行的任務
}
?>
有一組以學號為下標,姓名為值的數組,這時候需要遍歷數組的姓名。
<?php
$students = array('2010'=>'令狐沖','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向問天','2015'=>'任我行','2016'=>'沖虛','2017'=>'方正','2018'=>'岳不群','2019'=>'寧中則',);//10個學生的學號和姓名,用數組存儲
//使用循環結構遍歷數組,獲取學號和姓名??
foreach($students as? $v)
{? ??
?echo $v; ? ? ? //輸出(打印)姓名
echo "<br/>";
}
?>
列出所有學生學號和姓名!
<?php
$students = array('2010'=>'令狐沖','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向問天','2015'=>'任我行','2016'=>'沖虛','2017'=>'方正','2018'=>'岳不群','2019'=>'寧中則',);//10個學生的學號和姓名,用數組存儲
//使用循環結構遍歷數組,獲取學號和姓名
foreach($students as ?$key=>$v)
{
echo $key.":".$v;//輸出(打印)學號:姓名
echo "<br/>";
}
?>
10.PHP中結構嵌套之條件嵌套
條件結構嵌套就像回家的路上會遇到多個十字路口。
11.PHP中結構嵌套之循環嵌套
循環結構嵌套,就是類似于跑多個足球場,例如假設有兩個足球場,一個大足球場,一個小足球場,在大足球場跑一圈后,再到小足球場跑幾圈,跑完幾圈后,再到大足球場中繼續跑。在遍歷二維數組中很常用。
12.PHP中結構嵌套之循環結構與條件結構嵌套
有時候在執行任務時,對于一些特殊的任務還需要進行額外處理,這個時候就會將循環結構與條件結構嵌套使用。