PHP 學習筆記

前言

雖然說已經工做,而且也作了兩個項目,但總以爲本身的基礎知識不牢固,因此從頭開始學起。學習過程當中的一些代碼已上傳到 Github碼雲php

基礎知識

認識 PHP

略。。。git

安裝與配置

略。。。github

語言基礎

標記風格

XML 風格windows

<?php
    echo "這是 XML 風格";
?>

腳本風格數組

<script language="php">
    echo "這是腳本風格";
</script>

簡短風格服務器

<? echo "這是簡短風格"; ?>

ASP 風格cookie

<%
    echo "這是 ASP 風格";
%>

若是使用簡短風格和 ASP 風格,須要在 php.ini 中進行設置,將 short_open_tag 和 asp_tags 設置爲 ON,重啓 Apache 服務器session

推薦使用 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_MAXPHP_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 的強制轉換

  1. 包含合法的十進制整數值的字符串會被轉換成整數值,例如 "3" 會轉換成 3,而 "03" 則不會轉換成 3
  2. 浮點數也會強制轉換爲整型,方式爲向下取整,例如 2.3 會轉換成 2
  3. 布爾值中 true 會轉換爲 1,false 轉換爲 0
  4. 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]
|
&&
//
??

  1. 按位異或 ↩︎

相關文章
相關標籤/搜索