目錄
前提
PHP運行環境,只是單純的學習可以考慮安裝PHP集成環境軟件,比如PhpStudy,Xampp等軟件,可以一步到位。
基本語法
<?php //PHP標記
echo 'Hello,World!'; //輸出"Hello,World!"
?>
數據類型
PHP變量中的數據類型不是由程序員設定的,而是由該變量使用的上下文運行時決定的。
echo:輸出一個或多個字符串(只能打印標量類型)
var_dump():打印變量的值和類型
print_r():易於理解的格式打印變量,相較於echo,可以打印更多數據類型
1. 四種標量類型
Boolean 布爾類型
<?php
$a_bool = TRUE;
$b_bool = FALSE;
echo $a_bool; //輸出1
echo $b_bool; //輸出空
var_dump($a_bool); //輸出bool(true)
var_dump($b_bool); //輸出bool(false)
print_r($a_bool); //輸出1
print_r($b_bool); //輸出空
Integer 整型
<?php
$a_int = 333;
echo $a_int; //輸出333
var_dump($a_int); //輸出int(333)
print_r($a_int); //輸出333
Float 浮點型
<?php
$a_float = 333.28;
echo $a_float; //輸出333.28
var_dump($a_float); //輸出float(333.28)
print_r($a_float); //輸出333.28
String 字符串
<?php
$a_string = 'Hello';
echo $a_string; //輸出Hello
var_dump($a_string); //輸出string(5)"Hello"
print_r($a_string); //輸出Hello
2. 三種複合類型
Array 數組
<?php
$a_array = array(1,333,333.28,'Hello');
echo $a_array; //輸出報錯
var_dump($a_array); //輸出array(4) { [0]=> int(1) [1]=> int(333) [2]=> float(333.28) [3]=> string(5) "Hello" }
print_r($a_array); //輸出Array ( [0] => 1 [1] => 333 [2] => 333.28 [3] => Hello )
Object 對象
<?php
class foo{
}
$bar = new foo;
var_dump($bar);//輸出object(foo)#1 (0) { }
print_r($bar);//輸出foo Object ( )
Callback / Callable 可調用
暫時空
3. 兩種特殊類型
NULL 無類型
NULL與0的區別,NULL代表空,不佔空間。0代表數值爲0,佔內存空間
<?php
$a_null = NULL;
echo $a_null; //不輸出
var_dump($a_null); //輸出NULL
print_r($a_null); //不輸出
Resource 資源
暫時空
變量
1. 變量名的命名規則
以字母,數字,下劃線構成,首字符不可以是數字。現在支持的更廣泛,甚至漢字也可以當變量名,但是強烈不建議這樣做。
2. 變量名,變量值和存儲地址的關係
定義一個變量,內存首先會開闢一塊空間,將變量值存入,存儲空間的地址由變量名所指向。
"$a = 3"
3. 可變變量
一個變量的變量名可以動態的設置和使用,一個可變變量獲取了一個普通變量的值作爲這個可變變量的變量名。
<?php
$who = $_GET['who'];
$user1 = "Lisa";
$user2 = "Mark";
$user3 = "Daine";
echo $$who; //根據GET參數傳的user1/user2/user3輸出用戶名
4. 變量類型的檢測(內置函數的使用)
<?php
$a = 12;
$b = 12.5;
$c = false;
$d = NULL;
$e = '12.5';
if(isset($a)){ //isset()判斷變量是否被定義
echo gettype($a); //返回變量的數據類型 integer
}
if(is_float($b)){
echo gettype($b); //double
}
if(is_bool($c)){
echo gettype($c); //boolean
}
if(is_null($d)){
echo gettype($d); //NULL
}
if(is_string($e)){
echo gettype($e); //string
}
5. 變量銷燬
unset()函數
<?php
$a = 12;
echo $a; //12
unset($a);
echo $a; //Undefined Variable
6. 變量的賦值方式
<?php
//1. 傳值賦值
$a = 12;
$b = 15;
$a = $b;
echo $a,$b,'<br />'; //1515
//2. 引用賦值
$b = &$a; //$b指向$a指向的內存空間
$a = 15;
$b = 12;
echo $a,$b,'<br />'; //1212
unset($a);
echo $a,$b,'<br />'; //NOTICE 12
常量
1. 常量命名方式
要求和變量相同,但習慣上用大寫字母區別於變量
2. 常量定義
<?php
define('ZHU_MOUNTAIN',8848);
/*
define('ZHU_MOUNTAIN',8848.8); //ERROR 不能重複定義
ZHU_MOUNTAIN = 8848.8 //ERROR 不能再賦值
*/
FUNCTION EH(){
echo ZHU_MOUNTAIN; //全局有效性
}
EH(); //輸出8848
3. 常量的檢測
<?php
//常量的檢測
if(defined('ZHU_MOUNTAIN')){
echo '常量HEIGHT已經定義';
}else{
echo '常量ZHU_MOUNTAIN未定義,我來定義','<br />';
define('ZHU_MOUNTAIN',8848);
}
if(defined('ZHU_MOUNTAIN')){
echo '常量ZHU_MOUNTAIN已經定義,值是',ZHU_MOUNTAIN,'<br />';
}
4. 動態常量
<?php
$who = $_GET['who'];
define("USER1","Lisa");
define("USER2","Mark");
define("USER3","Daine");
echo constant($who); //CONSTANT()函數返回常量值
運算符&表達式
算術運算符
<?php
$d = 5;
$e = 3;
echo $d + $e,'<br/>'; //8
echo $d - $e,'<br/>'; //2
echo $d * $e,'<br/>'; //15
echo $d / $e,'<br/>'; //1.66667 發生了類型轉換(區別於C/Java等語言)
echo $d % $e,'<br/>'; //2 //取模結果的符號和被除數有關
賦值運算符
<?php
$a = $b = $c = 12; //從右往左運算,依次賦值
echo $a,'~',$b,'~',$c;
比較運算符
<?php
// >,>=,<,<=,==,!=,!==,=== 返回值均爲bool型
$a = 2;
$b = "2";
if($a == $b){
echo 'aaaaaa'; //輸出aaaaaa
}
if($a === $b){
echo 'bbbbbb'; //未輸出
}
//"=="只表示值相同,"==="表示值和類型都相同
遞增/遞減運算符
<?php
$a = 1;
echo $a++; //1
echo $a--; //2
echo ++$a; //2
echo --$a; //1
邏輯運算符
<?php
/**************邏輯運算符*************************************
&&(and),||(or),!,xor(異或運算符,表達式值相同返回0,否則返回1)
***************************************************************/
//三元運算符 條件?返回值1:返回值2
echo 20>=12 && 6<12 ? 1 : 0; //1
echo (20<12 and 6<12) ? 1 : 0; //0 實際只執行了前半段,短路特性
echo 20>=12 || 6>12 ? 1 : 0; //1 實際只執行了前半段,短路特性
echo (20<=12 or 6>12) ? 1 : 0; //0
echo !(6>12) ? 1 : 0; //1
echo ((20>=12) xor (6<12) )? 1:0; //0
字符串運算符
<?php
$str1 = "Hello";
$str2 = "World";
$str = $str1 . ' ' . $str2; //字符串拼接
echo $str; //Hello World
位運算符
<?php
//&,|,~,^,<<,>>
$a = 12;
$b = 5;
/*
0000 1100
0000 0101
&|^--------------
*/
echo $a & $b; //4(10) =0000 0100(2)
echo $a | $b; //13(10)=0000 1101(2)
echo ~$a; //-13(10)=1111 0011(2) 涉及補碼運算
echo $a ^ $b; //9(10)=0000 1001(2)
echo $a << 2; //48(10)=0011 0000(2)
echo $b >> 2; //1(10)=0000 0001(2)
流程控制
順序語句
分支語句
<?php
/******
//條件語句解析:if滿足條件1,執行語句段1,否則查看是否滿足條件2,滿足則執行語句段2,否則執行語句段3
//if-else判斷有且僅有一段語句可以執行
*******/
if(條件1){
語句段1;
}else if(條件2){
語句段2;
}else{
語句段3;
}
//switch--case:適和於不同值,執行不同語句的情況,對if..if else..else的簡化
$day = 9;
switch($day){
case 1:
echo '星期一';
break;
case 2:
echo '星期二';
break;
case 3:
echo '星期三';
break;
case 4:
echo '星期四';
break;
case 5:
echo '星期五';
break;
case 6:
echo '星期六';
break;
case 7:
echo '星期七';
break;
default:
echo '你來自火星';
}
循環語句
<?php
/******
while循環:滿足條件1,則執行語句段,執行完後返回while判斷,如果條件滿足,繼續執行,否則跳出循環
******/
while(條件1){
語句段;
}
/******
do..while循環:相比於while,會先執行一次語句,然後判斷
******/
do{
語句段
}while(條件1);
/******
for循環:條件1一般是初始化,只執行一次,然後判斷條件2是否滿足,如果滿足,執行語句段,最後執行條件3,一般是循環次數的變化,繼續判斷條件是否滿足來執行語句段,不滿足條件則跳出。
******/
for(條件1;條件2;條件3){
語句段
}
//break強制跳出循環,continue結束本次循環,繼續下一次循環
函數
1. 函數的聲明和調用
<?php
//函數聲明
function foo($a,$b,$c=4){ //$c設置了默認參數(需置到函數參數列表的最後)
return $a+2*$b+3*$c; //函數執行結果返回
}
//函數調用
$res = foo(1,2);
echo $res;
/******************/
$str = 'foo';
echo $str(1,2); //可變函數,函數名可用變量值
2. 函數的作用域
函數體內部變量屬於局部變量,每次調用函數會申請內存空間,函數結束後再釋放。
函數體內部不可以使用外部變量,除非用global引用全局變量。
3. 函數的引用傳參
<?php
$a = 12;
function foo($num){
return ++$num;
}
echo foo($a),$a; //1312
function foo2(&$num){
return ++$num;
}
echo foo2($a),$a;//1313
4. 超級全局變量(可在任何地方引用)
$_GET:URL請求中傳的參數
$_POST:表單提交傳的參數
$_REQUEST:$_GET,$_POST,$_COOKIE的數組
$_FILES:文件上傳用
$_COOKIE:用戶登陸用
$_SESSION:用戶登陸用
$_SERVER:服務器和訪客信息
$_GLOBALS:所有全局變量的一個註冊表