1.PHP基本語法(一)
php可以做什麼
認識PHP代碼標識
使用不同的四對標記
指令分隔符
程序註釋
變量
什麼是變量
如何定義變量
變量名的命名規則
4.1 PHP標量類型—整型
4.2 標量類型—浮點型
4.3 PHP標量類型—字符串
4.4標量類型—布爾類型
4.5第一種特殊類型—資源
4.6PHP第二種特殊類型—空類型
4.7第一種複合類型—數組
4.8第二種複合類型—對象
超全局變量
empty()函數
isset()函數
常量
系統常量
內置常量
php可以做什麼
php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。
php是一門後臺編程語言,是目前比較主流的後臺編程語言。
認識一下PHP及其功能。
運行在服務器端:學會了PHP,就可以指揮服務器給你幹活,甚至是搞破壞^_^(千萬不能真這麼做咯),WEB網站的大部分數據都是存儲在服務器端的,PHP就是用來處理這些存儲在服務器的數據的(功能強大吧)。
跨平臺:服務器可以是多種平臺的服務器,比如Linux、Windows、Unix,你都可以指揮(不用怕只能指揮一種服務器啦吧)。
腳本語言:它是通過編寫腳本,也就是一行行的計算機指令(也可以理解為特定的英文單詞),來指揮服務器來工作的,因此,在編寫PHP的過程其實就是與老外(服務器成老外啦)交流的過程,交流的語言就是PHP。
免費:免費使用(天下還真有免費的午餐)。
認識PHP代碼標識
想在頁面中編寫PHP代碼非常容易,如下面代碼:
<?php
就像你可以編寫JavaScript腳本語言需要寫在<script></script>
標籤之間一樣,你可以在頁面中編寫PHP代碼寫在<?php ?>
標籤之間,但注意後面的?>
是可以省略的。
文件後綴名為.php結尾,上傳到Web服務器的文檔根目錄下,通過瀏覽器訪問Web服務器管理下的PHP文件,就可以運行PHP文件。
使用不同的四對標記
以
<?php
開始和以?>
結束標記是標準風格,這是PHP推薦使用的標記風格。以
<script language="php">
開始和<script>
結束是長風格標記,這種標記最長,總是可用的,但我們並不常用。以
<?
開始和以?>
結束標記是簡短風格的標記,是最簡單的,但是系統管理員偶爾會禁用掉它,因為它會干擾XML文檔的聲明。只用通過php.ini配置文件中的指令short_open_tag打開後就可以使用。以
<%
開始和以%>
結束標記是ASP風格的標記,可以在php.ini配置文件設定中啟用了asp_tags選項就可以使用它(默認是禁用的),習慣了ASP風格的可以使用它。
指令分隔符
PHP同C或Perl以及Java一樣,語句分為兩種:
一種是在程序中使用結構定義語句例如流程控制、函數與類的定義等,是用大括號來標記代碼塊,在大括號後面不要用分號。
另一種是在程序中使用功能執行語句,如變量的聲明、內容的輸出、函數的調用等,是用來在程序中執行某些特定功能的語句,這種語句也可稱為指令,PHP需要在每個指令後用分號
;
結束。和其他語言不一樣的是,在PHP中右括號
?>
前的分號不是必選的> 每個語句結束之後忘記加分號可是會報語法錯誤的哦~
程序註釋
對於閱讀代碼的人來說,註釋其實就相當於代碼的解釋和說明。註釋可以用來解釋腳本的用途、腳本編寫人、為什麼要按如此的方法編寫代碼、上一次修改的時間等等。
PHP支持C、C++和Shell腳本風格的註釋,如下:
單行註釋 //
$a = 3 //申明一個變量 這是單行註釋
多行註釋 (注意:不能嵌套)/**/
/* 多行註釋內容
腳本註釋 #
#這是一種腳本註釋方法
程序員在編程時使用註釋是一種良好的習慣,可以用來寫幫助文檔,有助於調試程序。
注意: 註釋要寫在代碼的上面或是右邊
變量
什麼是變量
變量是用於存儲值的,我們命令服務器去幹活的時候,往往需要產生一些數據,需要臨時性存放起來,方便取用。我們也可以理解為,變量就像一個購物袋,我們可以用來裝蘋果、榴蓮(當然也可以用來裝玫瑰),需要注意的是,一般情況下一個變量只能裝一個(不要太貪心)值,除非是複合變量(後面變量類型時會介紹),當我們放進去一個蘋果後,再放進榴蓮的時候,蘋果就被替換掉,再放入香蕉,那麼榴蓮就被替換了。
如何定義變量
定義變量就是向服務器的內存申請空間,用來存儲數據。這時候我們就需要用到變量名和變量值.
<?php$n = 10;
解釋一下,在=
左邊的是變量名,右邊的是變量值。完成定義變量後,需要一個;
告訴服務器這行指令已經結束。其中變量名必須通過$
符號標識,=
可不是我們平常所說的等號哦,在PHP中,=
是賦值運算符;在這裡,var_name
是變量名,蘋果
是變量值,它是一個字符串;n
是變量名,10
是變量值,它是一個整型。
變量名的命名規則
變量名除了需要$
進行標識外,還有一些規則需要遵守。變量名的命名規則主要有三條:
①變量名必須以字母或下劃線"-“開頭,數字不能開頭。如”$_name","$name" ,"$name2"等
②變量名只能由字母、數字以及下劃線
組成,還能包含漢字。如$_qq
$qq308
$my_apple
$name我等
但是$name*
是不對的。
③變量名不允許包含空格。當變量名由多個單詞組成,建議使用下劃線”-“進分隔比如 $my_apple
,俗稱下劃線法,或者以大寫字母開頭比如 $myApple
,俗稱駱駝式命名法(也稱駝峰命名法)。
特別需要注意的是,在PHP中變量名是區分大小寫的,如$my_book
與$my_Book
代表兩個不同的變量。
變量的數據類型
數據類型: PHP 支持八種原始類型。
四種常量類型:
在變量中,由於變量佔用的空間單元不一樣(佔的地盤大小不一樣),也分成幾種數據類型。
我們可以通過使用memory_get_usage
獲取當前PHP消耗的內存。
可以對比一下內存消耗
<?phpecho $m1 = memory_get_usage(); //初始化消耗內存echo "<br/>";
gettype() 返回變量的類型,共有8個可能的值string、integer、float、boolean、array、object、null、unknown
is_type() 查看變量是否屬於某個類型,如果是,返回TRUE,否則,返回FALSE
$arr = array(1);echo is_array($arr);
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(12) “就是就是” int(9494)
我們可以發現, 這個變量自動就從原來的字符串轉換成了整型咯。
4.1 PHP標量類型—整型
整型(integer):類似於常見的整數。它可以用十進制、八進制、十六進制指定。十進制就是日常使用的數字;八進制,數字前必須加上"0"(阿拉伯數字0);十六進制,數字前必須加"0x"(阿拉伯數字0)。如:
<?php$data_int = 1234; // 十進制數$data_int = -567; // 一個負數$data_int = 0123; // 八進制數(等於十進制的 83)$data_int = 0x1a; // 十六進制數(等於十進制的 26)?>
4.2 標量類型—浮點型
浮點型(浮點數、雙精度數或實數),也就是通常說的小數,可以用小數點或者科學計數法表示。科學計數法可以使用小寫的e,也可以使用大寫的E。
<?phpecho $num_float1 = 1.234; //小數點,輸出結果1.234echo $num_float2 = 1.2e3; //科學計數法,小寫e,輸出結果1200echo $num_float3 = 7.0E-3; //科學計數法,大寫E,輸出結果0.007?>
4.3 PHP標量類型—字符串
字符串是由一系列字符組成,在PHP中,字符和字節一樣,也就是說,一共有256種不同字符的可能性。
字符串型可以用三種方法定義:單引號形式、雙引號形式和Heredoc結構形式。
<?php$str_string1='我是字符串1';
當你的字符串中包含引號的時候,我們怎麼辦?
<?php$str_string1 = '甲問:"你在哪裡學的PHP?"'; //單引號中嵌入雙引號$str_string2 = "乙毫不猶豫地回答:'你猜!'"; //雙引號中嵌入單引號$str_string3 = '甲問:\'能告訴我網址嗎?\''; //單引號中嵌入單引號,使用轉義符""$str_string4 = "乙答道:"www.你猜.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!";
當我的字符串很長怎麼辦?
我們可以使用Heredoc結構形式(定界符)的方法來解決該問題,首先使用定界符表示字符串(<<<
),接著在"<<<"之後提供一個標識符GOD
,然後是字符串,最後以提供的這個標識符結束字符串。
<?php$string1=<<<GOD
在賦值符號後,輸入定界符"<<<",接著是標識符,你可以用你的女神作為標識符"GOD",如第2行,也可以使用你喜歡的狗狗,“DOG"作為標識符,但是,結尾處的標識符也必須是一樣的。此外,在結尾的一行,如第7行,一定要另起一行,並且此行除了"GOD”,並以";"號結束之外,不能有任何其他字符,前後都不能有,包括空格,否則會出現錯誤的哦。切記切記哦。
定界符也可以解析變量,如果想明確的指定名字的結束,可以用花括號{ }
把變量名括起來。
4.4標量類型—布爾類型
布爾類型(boolean):只有兩個值,一個是TRUE,另一個是FALSE,可以理解為是或否。它不區分大小寫。主要用在條件結構中。需要注意的是,當我們用echo指令輸出布爾類型時,如果是true則輸出的是1,false則什麼也不輸出。我們可以使用var_dump函數,獲取它真正的數據類型。
> 當其他類型轉換為 boolean類型 時,以下值被認為是FALSE:
布爾值 FALSE
整型值 0(零)
浮點型值 0.0(零)
空白字符串和字符串"0"
沒有成員變量的數組
沒有單元的對象(僅適用於 PHP 4)
特殊類型 NULL(包括尚未設定的變量)
所有其它值都被認為是 TRUE(包括任何資源)。
4.5第一種特殊類型—資源
資源(resource):資源是由專門的函數來建立和使用的,例如打開文件、數據連接、圖形畫布。我們可以對資源進行操作(創建、使用和釋放)。任何資源,在不需要的時候應該被及時釋放。如果我們忘記了釋放資源,系統自動啟用垃圾回收機制,在頁面執行完畢之後回收資源,以避免內存被消耗殆盡。
<?php$file=fopen("f.txt","r"); //打開文件$con=mysql_connect("localhost","root","root"); //連接數據庫$img=imagecreate(100,100);//圖形畫布?>
4.6PHP第二種特殊類型—空類型
NULL(NULL):NULL是空類型,對大小寫不敏感,NULL類型只有一個取值,表示一個變量沒有值,當被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認為為NULL。
<?phperror_reporting(0); //禁止顯示PHP警告提示$var; //為變量未賦值var_dump($var); //NULL$var1=null; //將null賦值給變量$var1var_dump($var1); //NULL$var2=NULL; //將NULL賦值給變量$var2var_dump( $var2); //NULL$var3 = "節日快樂!";unset($var3); //將變量$var3註銷定義var_dump($var3); //NULL?>
4.7第一種複合類型—數組
PHP 中的數組實際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方面做了優化,因此可以把它當成真正的數組來使用,或列表(矢量),散列表(是圖的一種實現),字典,集合,棧,隊列以及更多可能性。因為可以用另一個 PHP 數組作為值,也可以很容易地模擬樹。本書將用一章介紹數組的聲明與使用,這裡僅作簡要說明。
PHP中可以使用多種方式構建一個數組,在這裡我們只用array()語言結構來新建一個array。它接受一定數量用逗號分隔的 key => value 參數對。
語法結構: array( [key =>] value , ... )// key 可以是integer或者string類型// value 可以是任何值 <?php
4.8第二種複合類型—對象
在PHP中,對象和數組一樣都是一種複合數據類型。但對象是一種更高級的數據類型。一個對象類型的變量,是由一組屬性值和一組方法構成,其中屬性表明對象的一種狀態,方法通常用來表明對象的功能。本書將用一章的內容來介紹對象的使用,這裡僅作簡要的說明。要初始化一個對象,用 new 語句將對象實例到一個變量中。
<?php
超全局變量
php提供了很多預定義的變量,用於提供大量與環境有關的信息。
$_SERVER 服務器變量,該全局變量包含著服務器和客戶端配置及當前請求環境的有關信息。
print_r ($_SERVER)
$_SERVER['SERVER_NAME']
:當前運行腳本所在的服務器的主機名$_SERVER['REMOTE_ADDR']
:客戶端IP地址$_SERVER['REQUEST_URI']
:URL的路徑部分$_SERVER['HTTP_USER_AGENT']
:操作系統和瀏覽器的有關信息$_GET 該變量包含使用GET方法傳遞的有關信息
$_POST 該變量包含使用POST方法傳遞的參數的有關信息。
$_REQUEST 該變量記錄著通過各種輸入方法傳遞給腳本的變量,如GET、POST,但不要用這個超級全局變量,因為它不安全而且速度比較慢。
$_COOKIE cookie變量數組
$_SESSION 會話變量數組
$_FILES 與上傳文件有關的變量數組
$_ENV 環境變量數組
$GLOBALS 所有全局變量數組
empty()函數
empty()
函數是用來測試變量是否已經配置,判斷值為否為空。
> 若變量已存在、非空字符串或者非零,則返回 false 值;反之返回 true值。所以,當字符串的值為0時,也返回true,就是執行empty內部的語句。這就是陷阱。0為空。
如: 假設 $value = 0;
則empty($value)=false
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";
常量的作用
常量主要功效是可以避免重複定義,篡改變量值。在我們進行團隊開發時,或者代碼量很大的時候,對於一些第一次定義後不改變的量,如果我們使用變量,在不知情的情況下,使用同一變量名時,變量值就會被替換掉,從而會引發服務器執行錯誤的任務。
此外,使用常量還能提高代碼的可維護性。如果由於某些原因,常量的值需要變更時候,我們只需要修改一個地方。例如在做計算中,起初我們取圓周率為3.14,於是很多計算中我們都使用3.14進行計算,當要求計算精度提高,圓周率需要取3.142的時候,我們不得不修改所有使用3.14的代碼,倘若代碼量比較多時,不僅工作量大,還可能遺漏。
<?phpdefine("PI",3.14);
系統常量
系統常量是php已經定義好的常量,我們可以直接拿來使用,常見的系統常量有:
__FILE__
:php程序文件名。它可以幫助我們獲取當前文件在服務器的物理位置。__LINE__
:PHP程序文件行數。它可以告訴我們,當前代碼在第幾行。PHP_VERSION
:當前解析器的版本號。它可以告訴我們當前PHP解析器的版本號,我們可以提前知道我們的PHP代碼是否可被該PHP解析器解析。PHP_OS
:執行當前PHP版本的操作系統名稱。它可以告訴我們服務器所用的操作系統名稱,我們可以根據該操作系統優化我們的代碼。
<?phpecho _FILE_;echo _LINE_;echo PHP_VERSION;echo PHP_OS;?>
常量如何取值
獲取常量值的有兩種方法取值。第一種是使用常量名直接獲取值;例如計算圓周率的面積,如下("*"是運算符,相當於乘號,後面部分的小節會介紹):
<?phpdefine("PI",3.14);
第二種是使用constant()函數。它和直接使用常量名輸出的效果是一樣的,但函數可以動態的輸出不同的常量,在使用上要靈活、方便,其語法格式如下:
mixed constant(string constant_name)
第一個參數constant_name為要獲取常量的名稱,也可為存儲常量名的變量。如果成功則返回常量的值,失敗則提示錯誤信息常量沒有被定義。(注:mixed表示函數返回值類型為多種不同的類型,string表示參數類型為字符串類型)
//舉個栗子:
<?php$p="";//定義圓周率的兩種取值define("PI1",3.14);
如何判斷常量是否被定義
如果常量被重複定義以後,PHP解析器會發出"Constant XXX already defined
"的警告,提醒我們該常量已經被定義過。那麼,在團隊開發,或代碼量很大的情況下,我們如何去判定一個常量是否被定義呢?
defined()
函數可以幫助我們判斷一個常量是否已經定義,其語法格式為:
bool defined(string constants_name)
它只有參數constant_name,指的是要獲取常量的名稱,若存在則返回布爾類型true,否則返回布爾類型false; (注:bool表示函數返回值類型為布爾類型)
<?php
內置常量
PHP_OS php所在操作系統的名稱
PHP_VERSION 當前的php的版本號
魔術常量(下面都是兩個下劃線額)
__LINE__ 文件中的當前行號
__FILE__ 文件的完整路徑和文件名
__FUNCTION__ 函數名稱
__CLASS__ 類的名稱
__METHOD__ 類的方法名