前言 雖說已經工作,並且也做了兩個項目,但總覺得自己的基礎知識不牢固,所以從頭開始學起。學習過程中的一些代碼已上傳到 "Github" 和 "碼雲" 基礎知識 認識 PHP 略。。。 安裝與配置 略。。。 語言基礎 標記風格 XML 風格 腳本風格 簡短風格 ASP 風格 如果使用簡短風格和 ASP ...
前言
雖說已經工作,並且也做了兩個項目,但總覺得自己的基礎知識不牢固,所以從頭開始學起。學習過程中的一些代碼已上傳到 Github 和 碼雲
基礎知識
認識 PHP
略。。。
安裝與配置
略。。。
語言基礎
標記風格
XML 風格
<?php
echo "這是 XML 風格";
?>
腳本風格
<script language="php">
echo "這是腳本風格";
</script>
簡短風格
<? echo "這是簡短風格"; ?>
ASP 風格
<%
echo "這是 ASP 風格";
%>
如果使用簡短風格和 ASP 風格,需要在 php.ini 中進行設置,將 short_open_tag 和 asp_tags 設置為 ON,重啟 Apache 伺服器
推薦使用 XML 風格
註釋
單行註釋
- C++ 風格(//)
<?php
// 單行註釋
?>
- Shell 風格(#)
<?php
# Shell 風格的單行註釋
?>
多行註釋
<?php
/*
多行註釋
多行註釋
多行註釋
*/
?>
單行註釋中不允許出現 ?> PHP 結束標簽
多行註釋中不允許出現 */ 多行註釋結束標簽
數據類型
PHP 中數據類型可以分為三類:標量類型、複合類型、特殊類型
標量類型
布爾類型
布爾類型只有兩個值:真(true),假(false),通常使用在條件控制或迴圈控制語句的條件表達式中
PHP 中可以自動轉換為假(false)的值:0, 0.0, "0", "", []
字元串類型
字元串就是連續出現的字元序列。PHP 支持四種定義字元串的方式:單引號('),雙引號("),heredoc 語法結構,nowdoc 語法結構
- 單引號
<?php
echo '字元串';
?>
- 雙引號
<?php
echo "字元串";
?>
如果字元串包含在雙引號(")中,可以對變數和一些特殊字元進行解析
# | 含義 |
---|---|
\n | 換行(new line) |
\r | 回車 |
\t | 水平製表符 |
\v | 垂直製表符 |
\e | Escape |
\f | 換頁 |
\\ | 反斜線 |
\$ | 美元符號 |
\' | 單引號 |
\" | 雙引號 |
... |
\r 和 \n 在 windows 中的對比效果不明顯,在 Linux 中,\n 表示換到下一行,但不會回到行首;而 \r 表示游標回到行首,但仍在本行
- heredoc 語法結構
<?php
<<<EOD
這是 heredoc 語法結構
EOD
?>
- nowdoc 語法結構
<?php
<<<'EOD'
這是 nowdoc 語法結構
EOD
?>
heredoc 和 nowdoc 語法結構和雙引號與單引號的關係類似,heredoc 可以解析上面列出的特殊字元,nowdoc 不可以。heredoc 語法結構和 nowdoc 語法結構的結束標識符必須在行首。
整型
在 32 位操作系統中,有效的數值範圍的 -2147483648~2147483647(書上這麼寫的),在 PHP7 (不要問我為什麼是 PHP7,因為我用 PHP7 測試的)中可以使用 PHP_INT_MAX
和 PHP_INT_MIN
來獲取範圍的最大最小值。整型可以使用十進位、二進位、八進位、十六進位來表示,使用八進位,需要在數字前面加上0,使用十六進位需要在數字前面加上0x。
- 十進位
<?php
echo 123; // 正數
echo -123; // 負數
?>
- 二進位
<?php
echo 0b10011;
?>
- 八進位
<?php
echo 0123;
?>
在八進位中,如果出現非法數字 8,9這些,程式會報錯(PHP7 中是這樣)
- 十六進位
<?php
echo 0x123;
?>
整數溢出
如果給定一個數超出了 integer 的範圍,會被解釋為 float。
不要將未知分數強制轉換為 integer
<?php
echo (int)( (0.1 + 0.7) * 10 ); // 結果是 7
?>
浮點類型
浮點類型預設有兩種格式,標準格式的科學記數法格式
<?php
$float = 3.1415;
$float2 = -23.3;
$float3 = 2.34E2;
echo pi(); // 圓周率
?>
浮點型數值只是一個近似值,要儘量避免浮點數比較大小
複合數據類型
數組 array
數組的定義:
<?php
$arr = array(
$key => $val,
...
);
// 或
$arr = [
$key => $val,
...
];
?>
數組的取值:
<?php
echo $arr[$key];
?>
數組 key 的強制轉換
- 包含合法的十進位整數值的字元串會被轉換成整數值,例如 "3" 會轉換成 3,而 "03" 則不會轉換成 3
- 浮點數也會強制轉換為整型,方式為向下取整,例如 2.3 會轉換成 2
- 布爾值中 true 會轉換為 1,false 轉換為 0
- Null 會轉換為空字元串""
如果在數組中定義了相同的鍵名,只使用最後一個
對象 object
類的實例,使用 new 關鍵字創建。
<?php
class Foo
{
protected $name = 'class';
public function show()
{
echo $this->name;
}
}
$obj = new Foo(); // 這是的 obj 就是一個對象,是從 Foo 這個類實例化來的
?>
特殊數據類型
資源類型 resource
手冊上解釋的是:它是保存了外部資源的一個引用。
NULL
表示一個變數沒有值,以下情況會被認為是 NULL
- 被賦值為 NULL
- 變數未賦值
- 被 unset()
數據類型轉換
轉換操作符 | 轉換類型 |
---|---|
(boolean) | 布爾類型 |
(string) | 字元串類型 |
(integer)/(int) | 整型 |
(float) | 浮點型 |
(array) | 數組 |
(object) | 對象 |
(unset) | NULL(PHP5) |
還可以使用 settype(mixd var, string type) : boolean 函數對類型進行轉換,第一個參數是要轉換的變數,第二個參數是要轉換的類型,支持:boolean, float, integer, array, null, object, string。轉換成功返回 true,失敗返回 false。
檢測數據類型
PHP 中內置了檢測數據類型的系列函數,判斷一個變數是否屬於某個類型,是的話返回 true,不是返回 false。
函數 | 檢測類型 |
---|---|
is_bool(mixed var) : boolean | 布爾 |
is_string(mixed var) : boolean | 字元串 |
is_float(mixed var) : boolean/is_double(mixed var) : boolean | 浮點型 |
is_integer(mixed var) : boolean/is_int(mixed var) : boolean | 整型 |
is_null(mixed var) : boolean | NULL |
is_array(mixed var) : boolean | 數組 |
is_object(mixed var) : boolean | 對象 |
is_numeric(mixed var) : boolean | 數字或由數字組成的字元串 |
PHP 常量
常量是一個簡單的標識符,在腳本運行期間不允許改變。
常量的定義
使用 define() 函數,語法格式:
define(string constant_name, mixed value, boolean case_sensitive = false);
define() 函數說明:
參數 | 說明 |
---|---|
constant_name | 必須,常量名 |
value | 必須,常量值 |
case_sensitive | 可選,指定是否大小寫敏感,預設為 false,表示敏感 |
常量的取值
一是直接使用常量名取值,另一種是使用 constant()
函數取值。
判斷一個常量是否已經定義
使用 defined() 函數判斷一個常量是否已經定義,如果定義了則返回 true,否則返回 false。
PHP 中常用的預定義常量
常量名 | 功能 |
---|---|
__FILE__ | PHP 程式文件名 |
__LINE__ | 當前所在行 |
PHP_VERSION | PHP 版本 |
PHP_OS | 執行 PHP 解析器的操作系統 eg. WINNT |
E_xxx | PHP 的錯誤調試部分,參考 error_reporting() 函數 |
PHP 變數
變數是在程式執行過程中可以變化的量,用一個美元符號後面跟上變數名錶示,區分大小寫。
變數聲名
變數名必須以字母或下劃線開頭,後面跟上數字、字母、下劃線,不能包含特殊符號,也不能以數字或其它特殊符號開頭。變數可以是中文,但不建議使用。
$this 是一個特殊的變數,不能被賦值
<?php
// 變數的聲明
$foo = 'variable';
$foo1 = 'var';
// $1_a = '1a'; // 變數名不合法
// $@abc = 'abc'; // 變數名不合法
$var = $foo; // 使用 $foo 給變數 $var 賦初值
$var2 = &$foo; // 引用賦值
$var2 = 'var2'; // 改變 $var2 的值
var_dump($foo); // $foo 的值也會改變
var_dump($var); // $var 的值還是 variable
?>
變數作用域
變數必須在有效的範圍內使用,超出變個範圍,變數就失去的意義。
全局變數不能被函數直接使用,如果要使用,必須在函數中聲明為 global
// 變數作用域
$a = 1;
function test()
{
echo $a; // 這裡不會有任何輸出,調用的局部的變數 $a
var_dump($a); // 列印結果顯示 NULL
}
test();
// 全局變數在函數內部使用的時候,必須使用 global
$b = 2;
function test2()
{
global $b; // 聲明為 global
echo $b; // 結果為 2
}
test2();
// 使用 $GLOBALS 代替 global
$c = 3;
function test3()
{
$GLOBALS['c'] = 5; // 使用 $GLOBALS 代替 global
}
test3();
echo $c; // 顯示結果為 5
一般來說,在函數中聲明的變數,在函數運行結束時,就會自動被清除掉,使用靜態變數則會被保留。
// 靜態變數
function static_var()
{
static $d = 1;
echo $d++;
}
static_var(); // 顯示 1
static_var(); // 顯示 2
可變變數
用一個變數的值,作為另一個變數的變數名。
// 可變變數
$e = 'f'; // 變數值為 f
$$e = 'I am f'; // 相當於 $f = 'I am f';
echo $f;
預定義變數
// 預定義變數
dump($GLOBALS); // 全局作用域中全部變數
dump($_SERVER); // 伺服器和執行環境信息
dump($_GET); // HTTP GET 變數
dump($_POST); // HTTP POST 變數
dump($_FILES); // HTTP 文件上傳變數
dump($_REQUEST); // HTTP REQUEST 變數
dump($_SESSION); // session 變數
dump($_COOKIE); // cookies
dump($_ENV); // 環境變數
dump($php_errormsg); // 前一個錯誤信息
dump($HTTP_RAW_POST_DATA); // 原生 POST 數據
dump($http_response_header);// http 響應頭
function dump($var)
{
echo '<pre>';
print_r($var);
echo '</pre>';
}
運算符
運算符是可以通過給出的一個或多個值,得出另一個值的東西。
運算符優先順序
從上到下,優先順序降低。
運算符 | 結合方向 |
---|---|
clone, new | 無 |
**[乘方運算符] | 右 |
++, --, ~[取反減1], (int), (float), ..., @ | 右 |
instanceof | 無 |
! | 右 |
*, /, % | 左 |
+, -, . | 左 |
<<, >> | 左 |
<, <=, >, >= | 無 |
==, !=, ===, !==, <>[相當於是 !=], <=>[a <=> b,如果a > b,返回1,相等返回0,否則返回-1] | 無 |
&[按位與] | 左 |
[1] | 左 |
| | 左 |
&& | 左 |
// | 左 |
?? | 右 |
按位異或 ↩︎