更新記錄
2017.01.18 添加超全局變量和數(shù)組部分系奉;補充代碼書寫和注釋的內(nèi)容
2017.02.09 補充完善字符串相關(guān)內(nèi)容麸折;補充變量類型相關(guān)內(nèi)容
一些基本概念
-
PHP代碼寫在PHP標(biāo)簽里面奕删,
<?php code here ?>
,一個文件可以有多對標(biāo)簽,當(dāng)代碼結(jié)束以后后面沒有其他內(nèi)容時孕暇,通常不閉合標(biāo)簽,一是這種情況PHP引擎本身也能完成解析赤兴,二是可以避免埋下一些坑點妖滔;例如是嵌套HTML的.php
文件那當(dāng)然是要閉合的啦。其實還有諸如短標(biāo)簽
<? code here ?>
(需要在安裝配置里開啟)桶良,script標(biāo)簽<script language="php"></script>
座舍,ASP風(fēng)格(5.3以后廢棄)這些書寫方式,不過知道就好了陨帆。 注釋代碼除了JS里的兩種方式外還支持shell風(fēng)格的
#
注釋內(nèi)容輸出
echo語句:
echo '這是一個字符串', 123;
echo語句主要輸出字符串曲秉,數(shù)字采蚀,可以一次輸出多個內(nèi)容,用逗號隔開承二。另外搏存,PHP的語法比JS更加嚴(yán)格,像這個echo語句矢洲,echo后面沒有空格璧眠,語句結(jié)束沒有分號,都會報語法錯誤读虏。print:
print 123;
和print('abc');
兩種方式都可以達到同樣的輸出责静。print和echo兩者的區(qū)別:
1.echo和print都不是函數(shù),是PHP語言本身的結(jié)構(gòu)盖桥,但是echo沒有返回值灾螃,print會有返回值;
2.echo可以一次性輸出多個內(nèi)容揩徊,print不可以腰鬼,會報錯
3.echo的運行速度比print快var_dump函數(shù),輸出的內(nèi)容會很詳細
<?php
var_dump('abc'); // string(3) "abc"
var_dump(123); // int(123)
var_dump(false); // bool(false)
?>
- echo在輸出布爾值的時候塑荒,
true
會輸出1熄赡,false
不會輸出;print和print_r也同樣如此齿税。
echo true, false, true; // 11
print true; // 1
print false; // 空白彼硫,沒有輸出
print_r(true); // 1
-
變量與數(shù)據(jù)類型
$
聲明變量,PHP變量名可以用中文凌箕,不過一般不會這么寫的拧篮;
PHP的變量共有8種原始類型,其中四種標(biāo)量類型(整型 integer牵舱,浮點型 float串绩,布爾型 boolean,字符串 string)芜壁,兩種復(fù)合類型(數(shù)組 array礁凡,對象 object),兩種特殊類型(資源 resource沿盅,空 null)把篓;
gettype()
函數(shù)傳入變量查看類型纫溃;
聲明變量但未賦值腰涧,或者賦值為null(NULL, NULl大小寫不敏感),或者對變量調(diào)用unset()
函數(shù)紊浩,變量的值都為特殊類型null窖铡;
字符串變量用雙引號時疗锐,可以傳入變量自動解析,換言之费彼,如果想在字符串里輸出美元符號$滑臊,那就得使用單引號字符串了;
跟JS同樣的箍铲,字符串里的引號雇卷,可以通過單雙引號交叉或者轉(zhuǎn)義符號實現(xiàn);
可以使用Heredoc結(jié)構(gòu)形式來創(chuàng)建長字符串颠猴,以<<<(界定符)GOD(標(biāo)識符)作為開始关划,然后字符串結(jié)尾處再使用GOD結(jié)束;$a = 123; $b = "abc$a"; // 'abc123' $c = 'abc$a'; // 'abc$a' $d = <<<GOD 我有一只小毛驢翘瓮,我從來也不騎贮折。 有一天我心血來潮,騎著去趕集资盅。 我手里拿著小皮鞭调榄,我心里正得意。 不知怎么嘩啦啦啦啦呵扛,我摔了一身泥每庆。 GOD; echo $d; // 輸出換行也會保留
創(chuàng)建對象
$obj = new stdClass();
PHP的變量作用域更加嚴(yán)格,同樣也有全局變量和局部變量今穿,即使是全局變量扣孟,在函數(shù)內(nèi)也無法直接訪問,要想在函數(shù)內(nèi)訪問外部變量荣赶,一般通過傳遞參數(shù)來進行凤价;函數(shù)內(nèi)訪問全局變量可以使用global
關(guān)鍵字,但現(xiàn)在一般也不這么做了拔创。$a = 11; test(); function test(){ global $a; echo $a; }
-
運算符
PHP的字符串拼接用.
符號利诺,訪問對象的屬性用->
符號,和JS區(qū)別開來剩燥。
注意兩個例子:echo 'a' . 222, '<br>'; // a222慢逾,后面的數(shù)字222會被轉(zhuǎn)換成字符串來運算 echo 'a' + 222; // 222 // 前面的字符串a(chǎn)被轉(zhuǎn)換成數(shù)字再運算,由于不是一個合法字符灭红,所以沒有數(shù)值
判斷不相等
!=
和<>
邏輯與&&
和邏輯或||
也可以分別用and
和or
標(biāo)示 -
函數(shù)
函數(shù)的聲明同樣也會提升侣滩,參數(shù)視為變量需要用$
符號;test(123); function test($a) { echo 'test' . $a; }
PHP有很多自帶函數(shù)变擒,列舉幾個常見的君珠,詳細使用可以查看手冊。
date('Y-m-d H:i:s'); date('今年是Y年');
參數(shù)中對應(yīng)的字母會轉(zhuǎn)換為年月日娇斑,日分秒策添,注意Y的大寫材部;
strlen('abc def') // 7
計算字符串長度,空格也算字符串
截取字符串:$str = 'abcdefg'; echo substr($str, 3); // 從下標(biāo)為3的字符開始截取到最后唯竹,defg echo substr($str, 0, 3); // abc乐导,從下標(biāo)0截取到下標(biāo)3 echo substr($str, -3); // efg,用負數(shù)表示將最后3個字符裁剪出來
-
常量
define
函數(shù)定義常量define('a', '字母a'); echo a; // 定義好的常量可以直接訪問浸颓,不用`$` // 一些PHP預(yù)設(shè)好的常量 echo '當(dāng)前運行的PHP文件是 ' . __FILE__; echo '<br/>當(dāng)前運行的PHP文件所在目錄是 ' . __DIR__; echo '<br/>運行這個腳本的PHP程序文件是 ' . PHP_BINARY;
超全局變量
這是JS沒有的東西物臂,就是在整個PHP的運行環(huán)境的任何地方都能直接訪問,無需加global
产上,主要記住三個常用的鹦聪,都是數(shù)組,$_GET
,$_POST
,$_SERVER
蒂秘,前兩個就是獲取get和post參數(shù)了泽本。-
數(shù)組
目前看來PHP里面數(shù)組非常重要,像JS里面對象那樣鍵值對存儲數(shù)據(jù)的形式姻僧,在PHP里其實也是作為數(shù)組存在的规丽。// 索引數(shù)組 $arr1 = [1, 2, 'abc']; echo $arr1[0]; // 還是下標(biāo)訪問 // count()函數(shù)返回數(shù)組有多少個元素 echo count($arr1); // 需要重點注意的是: // 如果傳入的變量不是數(shù)組而是其他的比如字符串,數(shù)字撇贺,布爾值赌莺,那么都會返回1 // 追加元素 $arr1[] = 'def'; // isset()函數(shù)檢驗是否存在該元素 echo isset($arr1[3]); // 存在 輸出1 echo isset($arr1[4]); // 不存在 不輸出 // 關(guān)聯(lián)數(shù)組 // 其實就是鍵值對的形式,注意 $arr2 = [ 'name' => '老王', 'age' => 26, 6 => 'abc', // 其實用數(shù)字作key也是可以的松嘶,從規(guī)范來講一般不會這么干 ]; echo $arr2['name']; // 和JS里的對象很像了艘狭,當(dāng)然對象更多用.訪問屬性 // 多維數(shù)組,當(dāng)然可以無限嵌套下去 $arr3 = [ 'name' => '老王', 'children' => [ 'Lucy', 'Lily' ], 'address' => [ 'city' => '北京', 'district' => '朝陽區(qū)', 'other' => ['123', '456'], ], ]; echo $arr3['children'][0]; echo $arr3['address']['city']; // 輸出數(shù)組可以用print_r()函數(shù) print_r($arr1); // Array ( [0] => 1 [1] => 2 [2] => abc [3] => def ) print_r($arr2); // Array ( [name] => 老王 [age] => 26 [6] => abc ) // 關(guān)聯(lián)和多維數(shù)組直接輸出不方便看的話可以這樣 echo '<pre>'; print_r($arr3); echo '</pre>'; // foreach循環(huán)數(shù)組 foreach ($arr2 as $value) { echo $value . '<br>'; } foreach ($arr2 as $key => $value) { echo $key . ' : ' . $value . '<br>'; } foreach ($arr1 as $char) { echo $char . '<br>'; } foreach ($arr1 as $num => $char) { echo $num . ' : ' . $char . '<br>'; }