溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP-送給想學(xué)PHP的小伙伴們

發(fā)布時(shí)間:2020-06-06 15:26:24 來源:網(wǎng)絡(luò) 閱讀:1308 作者:wx5b83bfb2a52d1 欄目:web開發(fā)

PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。
PHP 是免費(fèi)的,并且使用非常廣泛。同時(shí),對于像微軟 ASP 這樣的競爭者來說,PHP 無疑是另一種高效率的選項(xiàng)。
PHP 函數(shù)的完整參考手冊:
Array 函數(shù)
Calendar 函數(shù)
cURL 函數(shù)
Date 函數(shù)
Directory 函數(shù)
Error 函數(shù)
Filesystem 函數(shù)
Filter 函數(shù)
FTP 函數(shù)
HTTP 函數(shù)
LibXML 函數(shù)
Mail 函數(shù)
Math 函數(shù)
Misc 函數(shù)
MySQLi 函數(shù)
SimpleXML 函數(shù)
String 函數(shù)
XML Parser 函數(shù)
Zip 函數(shù)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 簡介
PHP 是服務(wù)器端腳本語言。
。。。。。。。。。。。。
PHP 是什么?
PHP(全稱:PHP:Hypertext Preprocessor,即"PHP:超文本預(yù)處理器")是一種通用開源腳本語言。
PHP 腳本在服務(wù)器上執(zhí)行。
PHP 可免費(fèi)下載使用。
PHP 對初學(xué)者而言簡單易學(xué)。
PHP 也為專業(yè)的程序員提供了許多先進(jìn)的功能。
。。。。。。。。。。。。
PHP 文件是什么?
PHP 文件可包含文本、HTML、JavaScript代碼和 PHP 代碼
PHP 代碼在服務(wù)器上執(zhí)行,結(jié)果以純 HTML 形式返回給瀏覽器
PHP 文件的默認(rèn)文件擴(kuò)展名是 ".php"
。。。。。。。。。。。。
PHP 能做什么?
PHP 可以生成動(dòng)態(tài)頁面內(nèi)容
PHP 可以創(chuàng)建、打開、讀取、寫入、關(guān)閉服務(wù)器上的文件
PHP 可以收集表單數(shù)據(jù)
PHP 可以發(fā)送和接收 cookies
PHP 可以添加、刪除、修改您的數(shù)據(jù)庫中的數(shù)據(jù)
PHP 可以限制用戶訪問您的網(wǎng)站上的一些頁面
PHP 可以加密數(shù)據(jù)
通過 PHP,您不再限于輸出 HTML。您可以輸出圖像、PDF 文件,甚至 Flash 電影。您還可以輸出任意的文本,比如 XHTML 和 XML。
。。。。。。。。。。。。
為什么使用 PHP?
PHP 可在不同的平臺(tái)上運(yùn)行(Windows、Linux、Unix、Mac OS X 等)
PHP 與目前幾乎所有的正在被使用的服務(wù)器相兼容(Apache、IIS 等)
PHP 提供了廣泛的數(shù)據(jù)庫支持
PHP 是免費(fèi)的,可從官方的 PHP 資源下載它: www.php.net
PHP 易于學(xué)習(xí),并可高效地運(yùn)行在服務(wù)器端
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 安裝
您需要做什么?
為了開始使用 PHP,您可以:
找一個(gè)支持 PHP 和 MySQL 的 Web 主機(jī)
在您自己的 PC 機(jī)上安裝 Web 服務(wù)器,然后安裝 PHP 和 MySQL
。。。。。。。。。。。
使用支持 PHP 的 Web 主機(jī)
如果您的服務(wù)器支持 PHP,那么您不需要做任何事情。
只要在您的 web 目錄中創(chuàng)建 .php 文件即可,服務(wù)器將自動(dòng)為您解析這些文件。
您不需要編譯任何軟件,或安裝額外的工具。
由于 PHP 是免費(fèi)的,大多數(shù)的 Web 主機(jī)都提供對 PHP 的支持。
。。。。。。。。。。。
在您自己的 PC 機(jī)上建立 PHP
然而,如果您的服務(wù)器不支持 PHP,您必須:
安裝 Web 服務(wù)器
安裝 PHP
安裝數(shù)據(jù)庫,比如 MySQL
官方 PHP 網(wǎng)站(PHP.net)有 PHP 的安裝說明: http://php.net/manual/en/install.php
。。。。。。。。。。。
PHP 服務(wù)器組件
對于初學(xué)者建議使用集成的服務(wù)器組件,它已經(jīng)包含了 PHP、Apache、Mysql 等服務(wù),免去了開發(fā)人員將時(shí)間花費(fèi)在繁瑣的配置環(huán)境過程。
。。。。。。。。。。。
WampServer(服務(wù)器)
Windows 系統(tǒng)可以使用 WampServer,下載地址:http://www.wampserver.com/,支持32位和64位系統(tǒng),根據(jù)自己的系統(tǒng)選擇版本。
WampServer 安裝也簡單,你只需要一直點(diǎn)擊 "Next" 就可以完成安裝了。
XAMPP(集成服務(wù)器)
XAMPP 支持 Mac OS 和 Windows 系統(tǒng),下載地址:https://www.apachefriends.org/zh_cn/index.html。
。。。。。。。。。。。
IDE (Integrated Development Environment,集成開發(fā)環(huán)境)
Eclipse for PHP(免費(fèi))
Eclipse 是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)(如果未安裝JDK,則需要先 下載 JDK 安裝)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)。
支持 Windows、Linux 和 Mac OS 平臺(tái)。
Eclipse for PHP 官方下載地址:http://www.eclipse.org/downloads/packages/eclipse-php-developers/heliosr
PhpStorm(收費(fèi))
PhpStorm是一個(gè)輕量級(jí)且便捷的PHP IDE,其旨在提供用戶效率,可深刻理解用戶的編碼,提供智能代碼補(bǔ)全,快速導(dǎo)航以及即時(shí)錯(cuò)誤檢查。
PhpStorm 非常適合于PHP開發(fā)人員及前端工程師。提供諸于:智能HTML/CSS/JavaScript/PHP編輯、代碼質(zhì)量分析、版本控制集成(SVN、GIT)、調(diào)試和測試等功能。
支持 Windows、Linux 和 Mac OS 平臺(tái)。
PhpStorm 官方下載地址:http://www.jetbrains.com/phpstorm/download/
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 語法
PHP 腳本在服務(wù)器上執(zhí)行,然后將純 HTML 結(jié)果發(fā)送回瀏覽器。
http:/ /www.iis7.com/b/ssyqdq/
。。。。。。。。。。。。。。
基本的 PHP 語法
PHP 腳本可以放在文檔中的任何位置。
PHP 腳本以 <?php 開始,以 ?> 結(jié)束,語法:<?php // PHP 代碼 ?>
PHP 文件的默認(rèn)文件擴(kuò)展名是 ".php"。
PHP 文件通常包含 HTML 標(biāo)簽和一些 PHP 腳本代碼。
PHP 中的每個(gè)代碼行都必須以分號(hào)結(jié)束。分號(hào)是一種分隔符,用于把指令集區(qū)分開來。
通過 PHP,有兩種在瀏覽器輸出文本的基礎(chǔ)指令:echo 和 print。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 變量。變量是用于存儲(chǔ)信息的"容器"
。。。。。。。。。。。。
與代數(shù)類似
x=5
y=6
z=x+y
在代數(shù)中,我們使用字母(如 x),并給它賦值(如 5)。
從上面的表達(dá)式 z=x+y ,我們可以計(jì)算出 z 的值為 11。
在 PHP 中,這些字母被稱為變量。
變量是用于存儲(chǔ)數(shù)據(jù)的容器。
。。。。。。。。。。。。
PHP 變量
與代數(shù)類似,可以給 PHP 變量賦予某個(gè)值(x=5)或者表達(dá)式(z=x+y)。
變量可以是很短的名稱(如 x 和 y)或者更具描述性的名稱(如 age、carname、totalvolume)。
PHP 變量規(guī)則:
變量以 $ 符號(hào)開始,后面跟著變量的名稱
變量名必須以字母或者下劃線字符開始
變量名只能包含字母數(shù)字字符以及下劃線(A-z、0-9 和 _ )
變量名不能包含空格
變量名是區(qū)分大小寫的($y 和 $Y 是兩個(gè)不同的變量)
PHP 語句和 PHP 變量都是區(qū)分大小寫的。
。。。。。。。。。。。。
創(chuàng)建(聲明)PHP 變量
PHP 沒有聲明變量的命令。
變量在您第一次賦值給它的時(shí)候被創(chuàng)建
注釋:當(dāng)您賦一個(gè)文本值給變量時(shí),請?jiān)谖谋局祪蓚?cè)加上引號(hào)。
。。。。。。。。。。。。
PHP 是一門弱類型語言
不必向 PHP 聲明該變量的數(shù)據(jù)類型。
PHP 會(huì)根據(jù)變量的值,自動(dòng)把變量轉(zhuǎn)換為正確的數(shù)據(jù)類型。
在強(qiáng)類型的編程語言中,我們必須在使用變量前先聲明(定義)變量的類型和名稱。
。。。。。。。。。。。。
PHP 變量作用域
變量的作用域是腳本中變量可被引用/使用的部分。
PHP 有四種不同的變量作用域:
local
global(全局變量)
static
parameter
。。。。。。。。。。。。
局部和全局作用域
在所有函數(shù)外部定義的變量,擁有全局作用域。除了函數(shù)外,全局變量可以被腳本中的任何部分訪問,要在一個(gè)函數(shù)中訪問一個(gè)全局變量,需要使用 global 關(guān)鍵字。
在 PHP 函數(shù)內(nèi)部聲明的變量是局部變量,僅能在函數(shù)內(nèi)部訪問
你可以在不同函數(shù)中使用相同的變量名稱,因?yàn)檫@些函數(shù)內(nèi)定義的變量名是局部變量,只作用于該函數(shù)內(nèi)。
。。。。。。。。。。。
PHP global 關(guān)鍵字
global 關(guān)鍵字用于函數(shù)內(nèi)訪問全局變量。
在函數(shù)內(nèi)調(diào)用函數(shù)外定義的全局變量,我們需要在函數(shù)中的變量前加上 global 關(guān)鍵字
PHP 將所有全局變量存儲(chǔ)在一個(gè)名為 $GLOBALS[index] 的數(shù)組中。 index 保存變量的名稱。這個(gè)數(shù)組可以在函數(shù)內(nèi)部訪問,也可以直接用來更新全局變量。
。。。。。。。。。。。
Static 作用域
當(dāng)一個(gè)函數(shù)完成時(shí),它的所有變量通常都會(huì)被刪除。然而,有時(shí)候您希望某個(gè)局部變量不要被刪除。
要做到這一點(diǎn),請?jiān)谀谝淮温暶髯兞繒r(shí)使用 static 關(guān)鍵字
然后,每次調(diào)用該函數(shù)時(shí),該變量將會(huì)保留著函數(shù)前一次被調(diào)用時(shí)的值。
注釋:該變量仍然是函數(shù)的局部變量。
。。。。。。。。。。。
參數(shù)作用域
參數(shù)是通過調(diào)用代碼將值傳遞給函數(shù)的局部變量。
參數(shù)是在參數(shù)列表中聲明的,作為函數(shù)聲明的一部分
。。。。。。。。。。。
1, 定義在函數(shù)外部的就是全局變量,它的作用域從定義處一直到文件結(jié)尾。
2、函數(shù)內(nèi)定義的變量就是局部變量,它的作用域?yàn)楹瘮?shù)定義范圍內(nèi)。
3、函數(shù)之間存在作用域互不影響。
4、函數(shù)內(nèi)訪問全局變量需要 global 關(guān)鍵字或者使用 $GLOBALS[index] 數(shù)組
在 php 中函數(shù)是有獨(dú)立的作用域,所以局部變量會(huì)覆蓋全局變量,即使局部變量中并定義沒有全局變量相同的變量,也會(huì)被覆蓋。
要想在函數(shù)中直接使用全局變量可以通過 global 關(guān)鍵字聲明或者通過 php 中自定義的 $GLOBALS 數(shù)組獲取
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 5 echo 和 print 語句
在 PHP 中有兩個(gè)基本的輸出方式: echo 和 print。
。。。。。。。。。。。。。。
PHP echo 和 print 語句
echo 和 print 區(qū)別:
echo - 可以輸出一個(gè)或多個(gè)字符串
print - 只允許輸出一個(gè)字符串,返回值總為 1
提示:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
。。。。。。。。。。。。
PHP echo 語句
echo 是一個(gè)語言結(jié)構(gòu),使用的時(shí)候可以不用加括號(hào),也可以加上括號(hào): echo 或 echo()。
顯示字符串。字符串可以包含 HTML 標(biāo)簽
顯示變量,用雙引號(hào)
。。。。。。。。。。。。
PHP print 語句
print 同樣是一個(gè)語言結(jié)構(gòu),可以使用括號(hào),也可以不使用括號(hào): print 或 print()。
顯示字符串,字符串可以包含 HTML 標(biāo)簽
顯示變量,用雙引號(hào)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP (文件結(jié)束符)EOF(heredoc,語法結(jié)構(gòu)) 使用說明
PHP EOF(heredoc)是一種在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序語言(像Perl、PHP、Python和Ruby)里定義一個(gè)字串的方法。
使用概述:

  1. 必須后接分號(hào),否則編譯通不過。
  2. EOF 可以用任意其它字符代替,只需保證結(jié)束標(biāo)識(shí)與開始標(biāo)識(shí)一致。
  3. 結(jié)束標(biāo)識(shí)必須頂格獨(dú)自占一行(即必須從行首開始,前后不能銜接任何空白和字符)。
  4. 開始標(biāo)識(shí)可以不帶引號(hào)或帶單雙引號(hào),不帶引號(hào)與帶雙引號(hào)效果一致,解釋內(nèi)嵌的變量和轉(zhuǎn)義符號(hào),帶單引號(hào)則不解釋內(nèi)嵌的變量和轉(zhuǎn)義符號(hào)。
  5. 當(dāng)內(nèi)容需要內(nèi)嵌引號(hào)(單引號(hào)或雙引號(hào))時(shí),不需要加轉(zhuǎn)義符,本身對單雙引號(hào)轉(zhuǎn)義,此處相當(dāng)與q和qq的用法。
    注意:
    1.以 <<<EOF 開始標(biāo)記開始,以 EOF 結(jié)束標(biāo)記結(jié)束,結(jié)束標(biāo)記必須頂頭寫,不能有縮進(jìn)和空格,且在結(jié)束標(biāo)記末尾要有分號(hào) 。
    2.開始標(biāo)記和結(jié)束標(biāo)記相同,比如常用大寫的 EOT、EOD、EOF 來表示,但是不只限于那幾個(gè)(也可以用:JSON、HTML等),只要保證開始標(biāo)記和結(jié)束標(biāo)記不在正文中出現(xiàn)即可。
    3.位于開始標(biāo)記和結(jié)束標(biāo)記之間的變量可以被正常解析,但是函數(shù)則不可以。在 heredoc 中,變量不需要用連接符 . 或 , 來拼接
    PHP 定界符 EOF 的作用就是按照原樣,包括換行格式什么的,輸出在其內(nèi)部的東西;
    在 PHP 定界符 EOF 中的任何特殊字符都不需要轉(zhuǎn)義;
    PHP 定界符 EOF
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 5 數(shù)據(jù)類型:
    String(字符串)
    Integer(整型)
    Float(浮點(diǎn)型)
    Boolean(布爾型)
    Array(數(shù)組)
    Object(對象)
    NULL(空值)
    。。。。。。。。
    PHP 字符串
    一個(gè)字符串是一串字符的序列,就像 "Hello world!"。
    你可以將任何文本放在單引號(hào)和雙引號(hào)中
    。。。。。。。。
    PHP 整型
    整數(shù)是一個(gè)沒有小數(shù)的數(shù)字。
    整數(shù)規(guī)則:
    整數(shù)必須至少有一個(gè)數(shù)字 (0-9)
    整數(shù)不能包含逗號(hào)或空格
    整數(shù)是沒有小數(shù)點(diǎn)的
    整數(shù)可以是正數(shù)或負(fù)數(shù)
    整型可以用三種格式來指定:十進(jìn)制, 十六進(jìn)制( 以 0x 為前綴)或八進(jìn)制(前綴為 0)。
    PHP var_dump() 函數(shù)返回變量的數(shù)據(jù)類型和值
    。。。。。。。。
    PHP 浮點(diǎn)型
    浮點(diǎn)數(shù)是帶小數(shù)部分的數(shù)字,或是指數(shù)形式。
    。。。。。。。。
    PHP 布爾型
    布爾型可以是 TRUE 或 FALSE。
    $x=true;
    $y=false;
    布爾型通常用于條件判斷。
    。。。。。。。。
    PHP 數(shù)組
    數(shù)組可以在一個(gè)變量中存儲(chǔ)多個(gè)值。
    PHP var_dump() 函數(shù)返回?cái)?shù)組的數(shù)據(jù)類型和值
    。。。。。。。。
    PHP 對象
    對象數(shù)據(jù)類型也可以用于存儲(chǔ)數(shù)據(jù)。
    在 PHP 中,對象必須聲明。
    首先,你必須使用class關(guān)鍵字聲明類對象。類是可以包含屬性和方法的結(jié)構(gòu)。
    然后我們在類中定義數(shù)據(jù)類型,然后在實(shí)例化的類中使用數(shù)據(jù)類型
    。。。。。。。。
    PHP NULL 值
    NULL 值表示變量沒有值。NULL 是數(shù)據(jù)類型為 NULL 的值。
    NULL 值指明一個(gè)變量是否為空值。 同樣可用于數(shù)據(jù)空值和NULL值的區(qū)別。
    可以通過設(shè)置變量值為 NULL 來清空變量數(shù)據(jù)
    。。。。。。。。
    var_dump() 方法,判斷一個(gè)變量的類型與長度,并輸出變量的數(shù)值,如果變量有值,則輸出是變量的值,并返回?cái)?shù)據(jù)類型。顯示關(guān)于一個(gè)或多個(gè)表達(dá)式的結(jié)構(gòu)信息,包括表達(dá)式的類型與值。數(shù)組將遞歸展開值,通過縮進(jìn)顯示其結(jié)構(gòu)。
    格式:var_dump ( mixed expression [, mixed expression [, ...]] )
    注意:用保證 var_dump 中的變量必須是存在的,如果變量不存在則返回 NULL。該函數(shù)有輸出的功能,因此不必加其它的輸出函數(shù)。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 5 常量
    常量值被定義后,在腳本的其他任何地方都不能被改變。
    。。。。。。。。。
    PHP 常量
    常量是一個(gè)簡單值的標(biāo)識(shí)符。該值在腳本中不能改變。
    一個(gè)常量由英文字母、下劃線、和數(shù)字組成,但數(shù)字不能作為首字母出現(xiàn)。 (常量名不需要加 $ 修飾符)。
    注意: 常量在整個(gè)腳本中都可以使用。
    。。。。。。。。。
    設(shè)置 PHP 常量
    設(shè)置常量,使用 define() 函數(shù),函數(shù)語法如右所示:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
    該函數(shù)有三個(gè)參數(shù):
    name:必選參數(shù),常量名稱,即標(biāo)志符。
    value:必選參數(shù),常量的值。
    case_insensitive :可選參數(shù),如果設(shè)置為 true,該常量則大小寫不敏感。默認(rèn)是大小寫敏感的,false。
    。。。。。。。。。
    常量是全局的
    常量在定義后,默認(rèn)是全局變量,可以在整個(gè)運(yùn)行的腳本的任何地方使用。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 字符串變量
    字符串變量用于存儲(chǔ)并處理文本。
    。。。。。。。。。
    PHP 中的字符串變量
    字符串變量用于包含有字符的值。
    在創(chuàng)建字符串之后,我們就可以對它進(jìn)行操作了。您可以直接在函數(shù)中使用字符串,或者把它存儲(chǔ)在變量中。
    注釋:當(dāng)您賦一個(gè)文本值給變量時(shí),請記得給文本值加上單引號(hào)或者雙引號(hào)。
    。。。。。。。。。
    PHP 并置運(yùn)算符
    在 PHP 中,只有一個(gè)字符串運(yùn)算符。
    并置運(yùn)算符 (.) 用于把兩個(gè)字符串值連接起來。
    。。。。。。。。。
    PHP strlen() 函數(shù)
    有時(shí)知道字符串值的長度是很有用的。
    strlen() 函數(shù)返回字符串的長度(字符數(shù))。
    strlen() 常常用在循環(huán)和其他函數(shù)中,因?yàn)槟菚r(shí)確定字符串何時(shí)結(jié)束是很重要的。(例如,在循環(huán)中,我們需要在字符串中的最后一個(gè)字符之后結(jié)束循環(huán))
    。。。。。。。。。
    PHP strpos() 函數(shù)
    strpos() 函數(shù)用于在字符串內(nèi)查找一個(gè)字符或一段指定的文本。
    如果在字符串中找到匹配,該函數(shù)會(huì)返回第一個(gè)匹配的字符位置。如果未找到匹配,則返回 FALSE。
    字符串中第一個(gè)字符的位置是 0,而不是 1。索引位置從[0]開始。
    。。。。。。。。。
    用strlen()f方法輸出中文,一個(gè)中文占 3 個(gè)字符數(shù)。
    可以使用 mb_strlen 設(shè)置指定編碼輸出中文字符個(gè)數(shù)
    。。。。。。。。。
    strpos() 返回的不是第一匹配的字符會(huì)的下標(biāo),是按照字符數(shù)量來算。
    中文下的字符在 UTF-8 下是 3 個(gè)字符長度,在 gbk 下是2個(gè)字符長度。
    這個(gè) strpos() 只能用于判斷字符在字符串中是否存在。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 運(yùn)算符
    在 PHP 中,賦值運(yùn)算符 = 用于給變量賦值。
    在 PHP 中,算術(shù)運(yùn)算符 + 用于把值加在一起。
    。。。。。。。。。
    PHP 算術(shù)運(yùn)算符
    運(yùn)算符 名稱 描述
    • 加 和
    • 減 差
    • 乘 積
      / 除 商
      % 模(除法的余數(shù)) 余數(shù)
    • x 取反 x 取反
      . 并置 連接兩個(gè)字符串
      HP7+ 版本新增整除運(yùn)算符 intdiv()
      。。。。。。。。。
      PHP 賦值運(yùn)算符
      在 PHP 中,基本的賦值運(yùn)算符是 "="。它意味著左操作數(shù)被設(shè)置為右側(cè)表達(dá)式的值。也就是說,"$x = 5" 的值是 5。
      運(yùn)算符 等同于 描述
      x = y x = y 左操作數(shù)被設(shè)置為右側(cè)表達(dá)式的值
      x += y x = x + y 加
      x -= y x = x - y 減
      x = y x = x y 乘
      x /= y x = x / y 除
      x %= y x = x % y 模(除法的余數(shù))
      a .= b a = a . b 連接兩個(gè)字符串
      。。。。。。。。。
      PHP 遞增/遞減運(yùn)算符
      運(yùn)算符 名稱 描述
      ++ x 預(yù)遞增 x 加 1,然后返回 x
      x ++ 后遞增 返回 x,然后 x 加 1(等于本身)
      -- x 預(yù)遞減 x 減 1,然后返回 x
      x -- 后遞減 返回 x,然后 x 減 1(等于本身)
      。。。。。。。。。
      PHP 比較運(yùn)算符
      比較操作符可以讓您比較兩個(gè)值:
      運(yùn)算符 名稱 描述 實(shí)例
      x == y 等于 如果 x 等于 y,則返回 true 5==8 返回 false
      x === y 絕對等于 如果 x 等于 y,且它們類型相同,則返回 true 5==="5" 返回 false
      x != y 不等于 如果 x 不等于 y,則返回 true 5!=8 返回 true
      x <> y 不等于 如果 x 不等于 y,則返回 true 5<>8 返回 true
      x !== y 絕對不等于 如果 x 不等于 y,或它們類型不相同,則返回 true 5!=="5" 返回 true
      x > y 大于 如果 x 大于 y,則返回 true 5>8 返回 false
      x < y 小于 如果 x 小于 y,則返回 true 5<8 返回 true
      x >= y 大于等于 如果 x 大于或者等于 y,則返回 true 5>=8 返回 false
      x <= y 小于等于 如果 x 小于或者等于 y,則返回 true 5<=8 返回 true
      。。。。。。。。。。
      PHP 邏輯運(yùn)算符
      運(yùn)算符 名稱 描述 實(shí)例
      x and y 與 如果 x 和 y 都為 true,則返回 true x=6 y=3 (x < 10 and y > 1) 返回 true (兩邊條件都成立時(shí))
      x or y 或 如果 x 和 y 至少有一個(gè)為 true,則返回 true x=6 y=3 (x==6 or y==5) 返回 true (兩邊條件有一個(gè)成立時(shí))
      x xor y 異或 如果 x 和 y 有且僅有一個(gè)為 true,則返回 true x=6 y=3 (x==6 xor y==3) 返回 false (兩邊條件都不成立時(shí))
      x && y 與 如果 x 和 y 都為 true,則返回 true x=6 y=3 (x < 10 && y > 1) 返回 true (兩邊條件都成立時(shí))
      x
      y 或 如果 x 和 y 至少有一個(gè)為 true,則返回 true x=6 y=3 (x==5 y==5) 返回 false (兩邊條件有一個(gè)成立時(shí))
      ! x 非 如果 x 不為 true,則返回 true x=6 y=3 !(x==y) 返回 true (取反相值)
      。。。。。。。。。。
      PHP 數(shù)組運(yùn)算符
      運(yùn)算符 名稱 描述
      x + y 集合 x 和 y 的集合
      x == y 相等 如果 x 和 y 具有相同的鍵/值對,則返回 true
      x === y 恒等 如果 x 和 y 具有相同的鍵/值對,且順序相同類型相同,則返回 true
      x != y 不相等 如果 x 不等于 y,則返回 true
      x <> y 不相等 如果 x 不等于 y,則返回 true
      x !== y 不恒等 如果 x 不等于 y,則返回 true
      。。。。。。。。。。
      三元運(yùn)算符
      另一個(gè)條件運(yùn)算符是"?:"(或三元)運(yùn)算符 。
      語法格式:(expr1) ? (expr2) : (expr3)
      對 expr1 求值為 TRUE 時(shí)的值為 expr2,在 expr1 求值為 FALSE 時(shí)的值為 expr3。
      自 PHP 5.3 起,可以省略三元運(yùn)算符中間那部分。表達(dá)式 expr1 ?: expr3 在 expr1 求值為 TRUE 時(shí)返回 expr1,否則返回 expr3。
      注意:PHP_EOL 是一個(gè)換行符,兼容更大平臺(tái)。
      在 PHP7+ 版本多了一個(gè) NULL 合并運(yùn)算符 ??
      。。。。。。。。。。
      組合比較符 "<=>"
      。。。。。。。。。。
      運(yùn)算符優(yōu)先級(jí)
      下面按照優(yōu)先級(jí)從高到低列出了運(yùn)算符。同一行中的運(yùn)算符具有相同優(yōu)先級(jí),此時(shí)它們的結(jié)合方向決定求值順序。
      說明:左 = 從左到右,右 = 從右到左。
      結(jié)合方向 運(yùn)算符 附加信息
      無 clone new clone 和 new
      左 [ array()
      右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 類型和遞增/遞減
      無 instanceof 類型
      右 ! 邏輯運(yùn)算符
      左 * / % 算術(shù)運(yùn)算符
      左 + – . 算術(shù)運(yùn)算符和字符串運(yùn)算符
      左 << >> 位運(yùn)算符
      無 == != === !== <> 比較運(yùn)算符
      左 & 位運(yùn)算符和引用
      左 ^ 位運(yùn)算符
      位運(yùn)算符
      左 && 邏輯運(yùn)算符
      邏輯運(yùn)算符
      左 ? : 三元運(yùn)算符
      右 = += -= *= /= .= %= &=
      = ^= <<= >>= => 賦值運(yùn)算符
      左 and 邏輯運(yùn)算符
      左 xor 邏輯運(yùn)算符
      左 or 邏輯運(yùn)算符
      左 , 多處用到
      運(yùn)算符優(yōu)先級(jí)中,or 和
      ,&& 和 and 都是邏輯運(yùn)算符,效果一樣,但是其優(yōu)先級(jí)卻不一樣。
      。。。。。。。。。。。
      括號(hào)的使用
      我們通過括號(hào)的配對來明確標(biāo)明運(yùn)算順序,而非靠運(yùn)算符優(yōu)先級(jí)和結(jié)合性來決定,通常能夠增加代碼的可讀性。
      。。。。。。。。。。。
      組合比較運(yùn)算符又名太空船運(yùn)算符,組合比較運(yùn)算符可以輕松實(shí)現(xiàn)兩個(gè)變量的比較,當(dāng)然不僅限于數(shù)值類數(shù)據(jù)的比較。
      語法是這樣的:
      $c = $a <=> $b;
      這句代碼的意思是:
      如果 $a > $b, $c 的值為 1
      如果 $a == $b, $c 的值為 0
      如果 $a < $b, $c 的值為-1
      運(yùn)算符的優(yōu)先級(jí)口訣:括(號(hào))、單(操作數(shù))、算(術(shù))、移(位)、關(guān)(系);位(運(yùn)算符)、邏(輯)、條(件)、賦(值)、逗(號(hào))。

      PHP If...Else 語句
      條件語句用于根據(jù)不同條件執(zhí)行不同動(dòng)作。
      。。。。。。。。。。。
      PHP 條件語句
      當(dāng)您編寫代碼時(shí),您常常需要為不同的判斷執(zhí)行不同的動(dòng)作。您可以在代碼中使用條件語句來完成此任務(wù)。
      在 PHP 中,提供了下列條件語句:
      if 語句 - 在條件成立時(shí)執(zhí)行代碼
      if...else 語句 - 在條件成立時(shí)執(zhí)行一塊代碼,條件不成立時(shí)執(zhí)行另一塊代碼
      if...elseif....else 語句 - 在若干條件之一成立時(shí)執(zhí)行一個(gè)代碼塊
      switch 語句 - 在若干條件之一成立時(shí)執(zhí)行一個(gè)代碼塊
      。。。。。。。。。。
      PHP - if 語句
      if 語句用于僅當(dāng)指定條件成立時(shí)執(zhí)行代碼。
      語法:
      if (條件)
      {
      條件成立時(shí)要執(zhí)行的代碼;
      }
      。。。。。。。。。。
      PHP - if...else 語句
      在條件成立時(shí)執(zhí)行一塊代碼,條件不成立時(shí)執(zhí)行另一塊代碼,請使用 if....else 語句。
      語法:
      if (條件)
      {
      條件成立時(shí)執(zhí)行的代碼;
      }
      else
      {
      條件不成立時(shí)執(zhí)行的代碼;
      }
      。。。。。。。。。。
      PHP - if...elseif....else 語句
      在若干條件之一成立時(shí)執(zhí)行一個(gè)代碼塊,請使用 if....elseif...else 語句。.
      語法:
      if (條件)
      {
      if 條件成立時(shí)執(zhí)行的代碼;
      }
      else if (條件)
      {
      else if 條件成立時(shí)執(zhí)行的代碼;
      }
      else
      {
      條件不成立時(shí)執(zhí)行的代碼;
      }
      。。。。。。。。。
      elseif 和 else if 完全同效果,elseif 是 PHP 為 else if 專門做到容錯(cuò)版。更準(zhǔn)確更嚴(yán)格到寫法為后者: else if
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP Switch 語句
      switch 語句用于根據(jù)多個(gè)不同條件執(zhí)行不同動(dòng)作。
      如果您希望有選擇地執(zhí)行若干代碼塊之一,請使用 switch 語句。
      語法:
      <?php
      switch (n)
      {
      case label1:
      如果 n=label1,此處代碼將執(zhí)行;
      break;
      case label2:
      如果 n=label2,此處代碼將執(zhí)行;
      break;
      default:
      如果 n 既不等于 label1 也不等于 label2,此處代碼將執(zhí)行;
      }
      ?>
      工作原理:首先對一個(gè)簡單的表達(dá)式 n(通常是變量)進(jìn)行一次計(jì)算。將表達(dá)式的值與結(jié)構(gòu)中每個(gè) case 的值進(jìn)行比較。如果存在匹配,則執(zhí)行與 case 關(guān)聯(lián)的代碼。代碼執(zhí)行后,使用 break 來阻止代碼跳入下一個(gè) case 中繼續(xù)執(zhí)行。default 語句用于不存在匹配(即沒有 case 為真)時(shí)執(zhí)行。
      在 switch 語句中漏寫 break, 可能會(huì)使你的輸出在你意料之外。
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 數(shù)組
      數(shù)組能夠在單個(gè)變量中存儲(chǔ)多個(gè)值
      。。。。。。。。。。。。
      數(shù)組是什么?
      數(shù)組是一個(gè)能在單個(gè)變量中存儲(chǔ)多個(gè)值的特殊變量。
      如果您有一個(gè)項(xiàng)目清單(例如:車名字的清單),將其存儲(chǔ)到單個(gè)變量中,如下所示:
      $cars1="Volvo";
      $cars2="BMW";
      $cars3="Toyota";
      然而,如果您想要遍歷數(shù)組并找出特定的一個(gè)呢?如果數(shù)組的項(xiàng)不只 3 個(gè)而是 300 個(gè)呢?
      解決辦法是創(chuàng)建一個(gè)數(shù)組!
      數(shù)組可以在單個(gè)變量中存儲(chǔ)多個(gè)值,并且您可以根據(jù)鍵訪問其中的值。
      。。。。。。。。。。。。
      在 PHP 中創(chuàng)建數(shù)組
      在 PHP 中,array() 函數(shù)用于創(chuàng)建數(shù)組:
      array();
      在 PHP 中,有三種類型的數(shù)組:
      數(shù)值數(shù)組 - 帶有數(shù)字 ID 鍵的數(shù)組
      關(guān)聯(lián)數(shù)組 - 帶有指定的鍵的數(shù)組,每個(gè)鍵關(guān)聯(lián)一個(gè)值
      多維數(shù)組 - 包含一個(gè)或多個(gè)數(shù)組的數(shù)組
      。。。。。。。。。。。。
      PHP 數(shù)值數(shù)組
      這里有兩種創(chuàng)建數(shù)值數(shù)組的方法:
      自動(dòng)分配 ID 鍵(ID 鍵總是從 0 開始):
      $cars=array("Volvo","BMW","Toyota");
      人工分配 ID 鍵:
      $cars[0]="Volvo";
      $cars[1]="BMW";
      $cars[2]="Toyota";
      。。。。。。。。。。。。
      獲取數(shù)組的長度 - count() 函數(shù)
      count() 函數(shù)用于返回?cái)?shù)組的長度(元素的數(shù)量)
      。。。。。。。。。。。。
      遍歷數(shù)值數(shù)組
      遍歷并打印數(shù)值數(shù)組中的所有值,您可以使用 for 循環(huán)
      。。。。。。。。。。。。
      PHP 關(guān)聯(lián)數(shù)組(鍵和值)
      關(guān)聯(lián)數(shù)組是使用您分配給數(shù)組的指定的鍵的數(shù)組。
      這里有兩種創(chuàng)建關(guān)聯(lián)數(shù)組的方法:
      $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
      或:
      $age['Peter']="35";
      $age['Ben']="37";
      $age['Joe']="43";
      。。。。。。。。。。。。。
      遍歷關(guān)聯(lián)數(shù)組
      遍歷并打印關(guān)聯(lián)數(shù)組中的所有值,您可以使用 foreach 循環(huán)
      聲明兩個(gè)變量,一個(gè)裝屬性,一個(gè)裝值
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 數(shù)組排序
      數(shù)組中的元素可以按字母或數(shù)字順序進(jìn)行降序或升序排列。
      。。。。。。。。。。
      PHP - 數(shù)組排序函數(shù)
      sort() - 對數(shù)組進(jìn)行升序排列
      rsort() - 對數(shù)組進(jìn)行降序排列
      asort() - 根據(jù)關(guān)聯(lián)數(shù)組的值,對數(shù)組進(jìn)行升序排列
      ksort() - 根據(jù)關(guān)聯(lián)數(shù)組的鍵,對數(shù)組進(jìn)行升序排列
      arsort() - 根據(jù)關(guān)聯(lián)數(shù)組的值,對數(shù)組進(jìn)行降序排列
      krsort() - 根據(jù)關(guān)聯(lián)數(shù)組的鍵,對數(shù)組進(jìn)行降序排列
      。。。。。。。。。。
      sort() - 對數(shù)組進(jìn)行升序排列,按數(shù)組中的元素字母升序排列。數(shù)字?jǐn)?shù)組就按數(shù)字的大小升序排列。
      。。。。。。。。。。
      rsort() - 對數(shù)組進(jìn)行降序排列,按數(shù)組中的元素字母降序排列。數(shù)字?jǐn)?shù)組就按數(shù)字的大小降序排列。
      。。。。。。。。。。
      asort() - 根據(jù)數(shù)組的值,對數(shù)組進(jìn)行升序排列
      ksort() - 根據(jù)數(shù)組的鍵,對數(shù)組進(jìn)行升序排列
      。。。。。。。。。。
      arsort() - 根據(jù)數(shù)組的值,對數(shù)組進(jìn)行降序排列
      krsort() - 根據(jù)數(shù)組的鍵,對數(shù)組進(jìn)行降序排列
      。。。。。。。。。。
      以上排序都用print_r輸出。
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 超級(jí)全局變量
      超級(jí)全局變量在PHP 4.1.0之后被啟用, 是PHP系統(tǒng)中自帶的變量,在一個(gè)腳本的全部作用域中都可用。
      。。。。。。。。。。
      PHP 超級(jí)全局變量
      PHP中預(yù)定義了幾個(gè)超級(jí)全局變量(superglobals) ,這意味著它們在一個(gè)腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數(shù)及類中使用。
      PHP 超級(jí)全局變量列表:
      $GLOBALS
      $_SERVER
      $_REQUEST
      $_POST
      $_GET
      $_FILES
      $_ENV
      $_COOKIE
      $_SESSION
      。。。。。。。。。
      PHP $GLOBALS
      $GLOBALS 是PHP的一個(gè)超級(jí)全局變量組,在一個(gè)PHP腳本的全部作用域中都可以訪問。
      $GLOBALS 是一個(gè)包含了全部變量的全局組合數(shù)組。變量的名字就是數(shù)組的鍵。
      。。。。。。。。
      PHP $_SERVER
      $_SERVER 是一個(gè)包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數(shù)組。這個(gè)數(shù)組中的項(xiàng)目由 Web 服務(wù)器創(chuàng)建。不能保證每個(gè)服務(wù)器都提供全部項(xiàng)目;服務(wù)器可能會(huì)忽略一些,或者提供一些沒有在這里列舉出來的項(xiàng)目。
      下表列出了所有 $_SERVER 變量中的重要元素:
      $_SERVER['PHP_SELF']
      當(dāng)前執(zhí)行腳本的文件名,與 document root 有關(guān)。例如,在地址為 http://example.com/test.php/foo.bar 的腳本中使用 $_SERVER['PHP_SELF'] 將得到 /test.php/foo.bar。FILE 常量包含當(dāng)前(例如包含)文件的完整路徑和文件名。 從 PHP 4.3.0 版本開始,如果 PHP 以命令行模式運(yùn)行,這個(gè)變量將包含腳本名。之前的版本該變量不可用。
      $_SERVER['GATEWAY_INTERFACE']:服務(wù)器使用的 CGI 規(guī)范的版本;例如,"CGI/1.1"。
      $_SERVER['SERVER_ADDR']:當(dāng)前運(yùn)行腳本所在的服務(wù)器的 IP 地址。
      $_SERVER['SERVER_NAME']:當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名。如果腳本運(yùn)行于虛擬主機(jī)中,該名稱是由那個(gè)虛擬主機(jī)所設(shè)置的值決定。(如: www.runoob.com)
      $_SERVER['SERVER_SOFTWARE']:服務(wù)器標(biāo)識(shí)字符串,在響應(yīng)請求時(shí)的頭信息中給出。 (如:Apache/2.2.24)
      $_SERVER['SERVER_PROTOCOL']:請求頁面時(shí)通信協(xié)議的名稱和版本。例如,"HTTP/1.0"。
      $_SERVER['REQUEST_METHOD']:訪問頁面使用的請求方法;例如,"GET", "HEAD","POST","PUT"。
      $_SERVER['REQUEST_TIME']:請求開始時(shí)的時(shí)間戳。從 PHP 5.1.0 起可用。 (如:1377687496)
      $_SERVER['QUERY_STRING']:query string(查詢字符串),如果有的話,通過它進(jìn)行頁面訪問。
      $_SERVER['HTTP_ACCEPT']:當(dāng)前請求頭中 Accept: 項(xiàng)的內(nèi)容,如果存在的話。
      $_SERVER['HTTP_ACCEPT_CHARSET']:當(dāng)前請求頭中 Accept-Charset: 項(xiàng)的內(nèi)容,如果存在的話。例如:"iso-8859-1,*,utf-8"。
      $_SERVER['HTTP_HOST']:當(dāng)前請求頭中 Host: 項(xiàng)的內(nèi)容,如果存在的話。
      $_SERVER['HTTP_REFERER']
      引導(dǎo)用戶代理到當(dāng)前頁的前一頁的地址(如果存在)。由 user agent 設(shè)置決定。并不是所有的用戶代理都會(huì)設(shè)置該項(xiàng),有的還提供了修改 HTTP_REFERER 的功能。簡言之,該值并不可信。)
      $_SERVER['HTTPS']:如果腳本是通過 HTTPS 協(xié)議被訪問,則被設(shè)為一個(gè)非空的值。
      $_SERVER['REMOTE_ADDR']:瀏覽當(dāng)前頁面的用戶的 IP 地址。
      $_SERVER['REMOTE_HOST']:瀏覽當(dāng)前頁面的用戶的主機(jī)名。DNS 反向解析不依賴于用戶的 REMOTE_ADDR。
      $_SERVER['REMOTE_PORT']:用戶機(jī)器上連接到 Web 服務(wù)器所使用的端口號(hào)。
      $_SERVER['SCRIPT_FILENAME']:當(dāng)前執(zhí)行腳本的絕對路徑。
      $_SERVER['SERVER_ADMIN']:該值指明了 Apache 服務(wù)器配置文件中的 SERVER_ADMIN 參數(shù)。如果腳本運(yùn)行在一個(gè)虛擬主機(jī)上,則該值是那個(gè)虛擬主機(jī)的值。(如:someone@runoob.com)
      $_SERVER['SERVER_PORT']:Web 服務(wù)器使用的端口。默認(rèn)值為 "80"。如果使用 SSL 安全連接,則這個(gè)值為用戶設(shè)置的 HTTP 端口。
      $_SERVER['SERVER_SIGNATURE']:包含了服務(wù)器版本和虛擬主機(jī)名的字符串。
      $_SERVER['PATH_TRANSLATED']:當(dāng)前腳本所在文件系統(tǒng)(非文檔根目錄)的基本路徑。這是在服務(wù)器進(jìn)行虛擬到真實(shí)路徑的映像后的結(jié)果。
      $_SERVER['SCRIPT_NAME']:包含當(dāng)前腳本的路徑。這在頁面需要指向自己時(shí)非常有用。FILE 常量包含當(dāng)前腳本(例如包含文件)的完整路徑和文件名。
      $_SERVER['SCRIPT_URI']:URI 用來指定要訪問的頁面。例如 "/index.html"。
      。。。。。。。。
      PHP $_REQUEST
      PHP $_REQUEST 用于收集HTML表單提交的數(shù)據(jù)。
      。。。。。。。。
      PHP $_POST
      PHP $_POST 被廣泛應(yīng)用于收集表單數(shù)據(jù),在HTML form標(biāo)簽的指定該屬性:"method="post"。
      。。。。。。。。
      PHP $_GET
      PHP $_GET 同樣被廣泛應(yīng)用于收集表單數(shù)據(jù),在HTML form標(biāo)簽的指定該屬性:"method="get"。
      $_GET 也可以收集URL中發(fā)送的數(shù)據(jù)。
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 循環(huán) - While 循環(huán)
      循環(huán)執(zhí)行代碼塊指定的次數(shù),或者當(dāng)指定的條件為真時(shí)循環(huán)執(zhí)行代碼塊。
      。。。。。。。。。。
      PHP 循環(huán)
      在您編寫代碼時(shí),您經(jīng)常需要讓相同的代碼塊一次又一次地重復(fù)運(yùn)行。我們可以在代碼中使用循環(huán)語句來完成這個(gè)任務(wù)。
      在 PHP 中,提供了下列循環(huán)語句:
      while - 只要指定的條件成立,則循環(huán)執(zhí)行代碼塊
      do...while - 首先執(zhí)行一次代碼塊,然后在指定的條件成立時(shí)重復(fù)這個(gè)循環(huán)
      for - 循環(huán)執(zhí)行代碼塊指定的次數(shù)
      foreach - 根據(jù)數(shù)組中每個(gè)元素來循環(huán)代碼塊
      。。。。。。。。。
      while 循環(huán)
      while 循環(huán)將重復(fù)執(zhí)行代碼塊,直到指定的條件不成立。
      語法:
      while (條件)
      {
      要執(zhí)行的代碼;
      }
      例子:
      下面的實(shí)例首先設(shè)置變量 i 的值為 1 ($i=1;)。
      然后,只要 i 小于或者等于 5,while 循環(huán)將繼續(xù)運(yùn)行。循環(huán)每運(yùn)行一次,i 就會(huì)遞增 1:
      <?php
      $i=1;
      while($i<=5)
      {
      echo "The number is " . $i . "<br>";
      $i++;
      }
      ?>
      輸出:
      The number is 1
      The number is 2
      The number is 3
      The number is 4
      The number is 5
      。。。。。。。。。。。。
      do...while 語句
      do...while 語句會(huì)至少執(zhí)行一次代碼,然后檢查條件,只要條件成立,就會(huì)重復(fù)進(jìn)行循環(huán)。
      語法:
      do
      {
      要執(zhí)行的代碼;
      }
      while (條件);
      例子:
      下面的實(shí)例首先設(shè)置變量 i 的值為 1 ($i=1;)。
      然后,開始 do...while 循環(huán)。循環(huán)將變量 i 的值遞增 1,然后輸出。先檢查條件(i 小于或者等于 5),只要 i 小于或者等于 5,循環(huán)將繼續(xù)運(yùn)行:
      <?php
      $i=1;
      do
      {
      $i++;
      echo "The number is " . $i . "<br>";
      }
      while ($i<=5);
      ?>
      輸出:
      The number is 2
      The number is 3
      The number is 4
      The number is 5
      The number is 6
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 循環(huán) - For 循環(huán)
      循環(huán)執(zhí)行代碼塊指定的次數(shù),或者當(dāng)指定的條件為真時(shí)循環(huán)執(zhí)行代碼塊。
      。。。。。。。。。。。
      for 循環(huán)
      for 循環(huán)用于您預(yù)先知道腳本需要運(yùn)行的次數(shù)的情況。
      語法
      for (初始值; 條件; 增量)
      {
      要執(zhí)行的代碼;
      }
      參數(shù):
      初始值:主要是初始化一個(gè)變量值,用于設(shè)置一個(gè)計(jì)數(shù)器(但可以是任何在循環(huán)的開始被執(zhí)行一次的代碼)。
      條件:循環(huán)執(zhí)行的限制條件。如果為 TRUE,則循環(huán)繼續(xù)。如果為 FALSE,則循環(huán)結(jié)束。
      增量:主要用于遞增計(jì)數(shù)器(但可以是任何在循環(huán)的結(jié)束被執(zhí)行的代碼)。
      注釋:上面的初始值和增量參數(shù)可為空,或者有多個(gè)表達(dá)式(用逗號(hào)分隔)。
      例子:
      下面的實(shí)例定義一個(gè)初始值為 i=1 的循環(huán)。只要變量 i 小于或者等于 5,循環(huán)將繼續(xù)運(yùn)行。循環(huán)每運(yùn)行一次,變量 i 就會(huì)遞增 1:
      <?php
      for ($i=1; $i<=5; $i++)
      {
      echo "The number is " . $i . "<br>";
      }
      ?>
      輸出:
      The number is 1
      The number is 2
      The number is 3
      The number is 4
      The number is 5
      。。。。。。。。。。
      foreach 循環(huán)
      foreach 循環(huán)用于遍歷數(shù)組。
      語法:
      foreach ($array as $value)
      {
      要執(zhí)行代碼;
      }
      每進(jìn)行一次循環(huán),當(dāng)前數(shù)組元素的值就會(huì)被賦值給 $value 變量(數(shù)組指針會(huì)逐一地移動(dòng)),在進(jìn)行下一次循環(huán)時(shí),您將看到數(shù)組中的下一個(gè)值。
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 函數(shù)
      PHP 的真正威力源自于它的函數(shù)。
      在 PHP 中,提供了超過 1000 個(gè)內(nèi)建的函數(shù)。
      。。。。。。。。。
      PHP 函數(shù)
      我們將如何創(chuàng)建自己的函數(shù)。
      如要在頁面加載時(shí)執(zhí)行腳本,您可以把它放到函數(shù)里。
      函數(shù)是通過調(diào)用函數(shù)來執(zhí)行的。
      你可以在頁面的任何位置調(diào)用函數(shù)。
      。。。。。。。。。
      創(chuàng)建 PHP 函數(shù)
      函數(shù)是通過調(diào)用函數(shù)來執(zhí)行的。
      語法:
      <?php
      function functionName()
      {
      // 要執(zhí)行的代碼
      }
      ?>
      PHP 函數(shù)準(zhǔn)則:
      函數(shù)的名稱應(yīng)該提示出它的功能
      函數(shù)名稱以字母或下劃線開頭(不能以數(shù)字開頭)
      。。。。。。。。。
      PHP 函數(shù) - 添加參數(shù)
      為了給函數(shù)添加更多的功能,我們可以添加參數(shù)。參數(shù)類似變量。
      參數(shù)就在函數(shù)名稱后面有一個(gè)括號(hào)內(nèi)指定。
      。。。。。。。。。
      PHP 函數(shù) - 返回值
      如需讓函數(shù)返回一個(gè)值,請使用 return 語句。
      :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 魔術(shù)常量
      PHP 向它運(yùn)行的任何腳本提供了大量的預(yù)定義常量。
      不過很多常量都是由不同的擴(kuò)展庫定義的,只有在加載了這些擴(kuò)展庫時(shí)才會(huì)出現(xiàn),或者動(dòng)態(tài)加載后,或者在編譯時(shí)已經(jīng)包括進(jìn)去了。
      有八個(gè)魔術(shù)常量它們的值隨著它們在代碼中的位置改變而改變。
      例如 LINE 的值就依賴于它在腳本中所處的行來決定。這些特殊的常量不區(qū)分大小寫
      。。。。。。。。。。
      LINE
      文件中的當(dāng)前行號(hào)。
      。。。。。。。。。。
      FILE
      文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。
      自 PHP 4.0.2 起,FILE 總是包含一個(gè)絕對路徑(如果是符號(hào)連接,則是解析后的絕對路徑),而在此之前的版本有時(shí)會(huì)包含一個(gè)相對路徑。
      。。。。。。。。。。
      DIR
      文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。
      它等價(jià)于 dirname(FILE)。除非是根目錄,否則目錄中名不包括末尾的斜杠。(PHP 5.3.0中新增)
      。。。。。。。。。。
      FUNCTION
      函數(shù)名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數(shù)被定義時(shí)的名字(區(qū)分大小寫)。在 PHP 4 中該值總是小寫字母的。
      。。。。。。。。。。
      CLASS
      類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時(shí)的名字(區(qū)分大小寫)。
      在 PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用區(qū)域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 對 trait 也起作用。當(dāng)用在 trait 方法中時(shí),CLASS 是調(diào)用 trait 方法的類的名字。
      。。。。。。。。。。
      TRAIT
      Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 實(shí)現(xiàn)了代碼復(fù)用的一個(gè)方法,稱為 traits。
      Trait 名包括其被聲明的作用區(qū)域(例如 Foo\Bar)。
      從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋。其行為 MyHelloWorld 類中定義的方法一致。優(yōu)先順序是當(dāng)前類中的方法會(huì)覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法。
      。。。。。。。。。。
      METHOD
      類的方法名(PHP 5.0.0 新加)。返回該方法被定義時(shí)的名字(區(qū)分大小寫)。
      。。。。。。。。。。
      NAMESPACE
      當(dāng)前命名空間的名稱(區(qū)分大小寫)。此常量是在編譯時(shí)定義的(PHP 5.3.0 新增)。
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      PHP 命名空間(namespace)
      PHP 命名空間(namespace)是在PHP 5.3中加入的,如果你學(xué)過C#和Java,那命名空間就不算什么新事物。 不過在PHP當(dāng)中還是有著相當(dāng)重要的意義。
      PHP 命名空間可以解決以下兩類問題:

  6. 用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。
  7. 為很長的標(biāo)識(shí)符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個(gè)別名(或簡短)的名稱,提高源代碼的可讀性。
    。。。。。。。。。。。。。。。
    定義命名空間
    默認(rèn)情況下,所有常量、類和函數(shù)名都放在全局空間下,就和PHP支持命名空間之前一樣。
    命名空間通過關(guān)鍵字namespace 來聲明。如果一個(gè)文件中包含命名空間,它必須在其它所有代碼之前聲明命名空間。語法格式如下;
    <?php
    // 定義代碼在 'MyProject' 命名空間中
    namespace MyProject;
    // ... 代碼 ...
    ?>
    你也可以在同一個(gè)文件中定義不同的命名空間代碼,如下所示:
    <?php
    namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { / ... / }
    function connect() { / ... / }
    }
    namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { / ... / }
    function connect() { / ... / }
    }
    ?>
    將全局的非命名空間中的代碼與命名空間中的代碼組合在一起,只能使用大括號(hào)形式的語法。全局代碼必須用一個(gè)不帶名稱的 namespace 語句加上大括號(hào)括起來,如下所示:
    <?php
    namespace MyProject {

const CONNECT_OK = 1;
class Connection { / ... / }
function connect() { / ... / }
}
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
在聲明命名空間之前唯一合法的代碼是用于定義源文件編碼方式的 declare 語句。所有非 PHP 代碼包括空白符都不能出現(xiàn)在命名空間的聲明之前。
<?php
declare(encoding='UTF-8'); //定義多個(gè)命名空間和不包含在命名空間中的代碼
namespace MyProject {
const CONNECT_OK = 1;
class Connection { / ... / }
function connect() { / ... / }
}
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
。。。。。。。。。。。。
子命名空間
與目錄和文件的關(guān)系很像,PHP 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義:
<?php
namespace MyProject\Sub\Level; //聲明分層次的單個(gè)命名空間
const CONNECT_OK = 1;
class Connection { / ... / }
function Connect() { / ... / }
?>
上面的例子創(chuàng)建了常量 MyProject\Sub\Level\CONNECT_OK,類 MyProject\Sub\Level\Connection 和函數(shù) MyProject\Sub\Level\Connect。
。。。。。。。。。。。
命名空間使用
PHP 命名空間中的類名可以通過三種方式引用:

  1. 非限定名稱,或不包含前綴的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。如果當(dāng)前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會(huì)被解析為foo。 警告:如果命名空間中的函數(shù)或常量未定義,則該非限定的函數(shù)名稱或常量名稱會(huì)被解析為全局函數(shù)名稱或常量名稱。
  2. 限定名稱,或包含前綴的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果當(dāng)前的命名空間是 currentnamespace,則 foo 會(huì)被解析為 currentnamespace\subnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會(huì)被解析為subnamespace\foo。
  3. 完全限定名稱,或包含了全局前綴操作符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo。
    注意:訪問任意全局類、函數(shù)或常量,都可以使用完全限定名稱
    。。。。。。。。。。。。
    命名空間和動(dòng)態(tài)語言特征
    PHP 命名空間的實(shí)現(xiàn)受到其語言自身的動(dòng)態(tài)特征的影響。
    必須使用完全限定名稱(包括命名空間前綴的類名稱)。注意因?yàn)樵趧?dòng)態(tài)的類名稱、函數(shù)名稱或常量名稱中,限定名稱和完全限定名稱沒有區(qū)別,因此其前導(dǎo)的反斜杠是不必要的。
    。。。。。。。。。。。。
    namespace關(guān)鍵字和NAMESPACE常量
    PHP支持兩種抽象的訪問當(dāng)前命名空間內(nèi)部元素的方法,NAMESPACE 魔術(shù)常量和namespace關(guān)鍵字。
    常量NAMESPACE的值是包含當(dāng)前命名空間名稱的字符串。在全局的,不包括在任何命名空間中的代碼,它包含一個(gè)空的字符串。
    NAMESPACE 示例, 在命名空間中的代碼
    關(guān)鍵字 namespace 可用來顯式訪問當(dāng)前命名空間或子命名空間中的元素。它等價(jià)于類中的 self 操作符。
    namespace操作符,命名空間中的代碼
    。。。。。。。。。。。。
    使用命名空間:別名/導(dǎo)入
    PHP 命名空間支持 有兩種使用別名或?qū)敕绞剑簽轭惷Q使用別名,或?yàn)槊臻g名稱使用別名。
    在PHP中,別名是通過操作符 use 來實(shí)現(xiàn)的.
    。。。。。。。。。。。
    使用命名空間:后備全局函數(shù)/常量
    在一個(gè)命名空間中,當(dāng) PHP 遇到一個(gè)非限定的類、函數(shù)或常量名稱時(shí),它使用不同的優(yōu)先策略來解析該名稱。類名稱總是解析到當(dāng)前命名空間中的名稱。因此在訪問系統(tǒng)內(nèi)部或不包含在命名空間中的類名稱時(shí),必須使用完全限定名稱
    1、在命名空間中訪問全局類對于函數(shù)和常量來說,如果當(dāng)前命名空間中不存在該函數(shù)或常量,PHP 會(huì)退而使用全局空間中的函數(shù)或常量。
    2、 命名空間中后備的全局函數(shù)/常量
    。。。。。。。。。。。
    全局空間
    如果沒有定義任何命名空間,所有的類與函數(shù)的定義都是在全局空間,與 PHP 引入命名空間概念前一樣。在名稱前加上前綴 \ 表示該名稱是全局空間中的名稱,即使該名稱位于其它的命名空間中時(shí)也是如此。
    。。。。。。。。。。。
    命名空間的順序
    自從有了命名空間之后,最容易出錯(cuò)的該是使用類的時(shí)候,這個(gè)類的尋找路徑是什么樣的了。
    為了引用全局命名空間中的全局類,必須使用完全限定名稱 new \C()。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 面向?qū)ο?br/>在面向?qū)ο蟮某绦蛟O(shè)計(jì)(英語:Object-oriented programming,縮寫:OOP)中,對象是一個(gè)由信息及對信息進(jìn)行處理的描述所組成的整體,是對現(xiàn)實(shí)世界的抽象。
    在現(xiàn)實(shí)世界里我們所面對的事情都是對象,如計(jì)算機(jī)、電視機(jī)、自行車等。
    對象的主要三個(gè)特性:
    對象的行為:可以對 對象施加那些操作,開燈,關(guān)燈就是行為。
    對象的形態(tài):當(dāng)施加那些方法是對象如何響應(yīng),顏色,尺寸,外型。
    對象的表示:對象的表示就相當(dāng)于×××,具體區(qū)分在相同的行為與狀態(tài)下有什么不同。
    比如 Animal(動(dòng)物) 是一個(gè)抽象類,我們可以具體到一只狗跟一只羊,而狗跟羊就是具體的對象,他們有顏色屬性,可以寫,可以跑等行為狀態(tài)。
    。。。。。。。。。。。。。
    面向?qū)ο髢?nèi)容
    類:定義了一件事物的抽象特點(diǎn)。類的定義包含了數(shù)據(jù)的形式以及對數(shù)據(jù)的操作。
    對象:是類的實(shí)例。
    成員變量:定義在類內(nèi)部的變量。該變量的值對外是不可見的,但是可以通過成員函數(shù)訪問,在類被實(shí)例化為對象后,該變量即可稱為對象的屬性。
    成員函數(shù):定義在類的內(nèi)部,可用于訪問對象的數(shù)據(jù)。
    繼承: 繼承性是子類自動(dòng)共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。
    父類:一個(gè)類被其他類繼承,可將該類稱為父類,或基類,或超類。
    子類:一個(gè)類繼承其他類稱為子類,也可稱為派生類。
    多態(tài):多態(tài)性是指相同的函數(shù)或方法可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。
    重載:簡單說,就是函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。
    抽象性: 抽象性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類。一個(gè)類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。
    封裝:封裝是指將現(xiàn)實(shí)世界中存在的某個(gè)客體的屬性與行為綁定在一起,并放置在一個(gè)邏輯單元內(nèi)。
    構(gòu)造函數(shù):主要用來在創(chuàng)建對象時(shí)初始化對象, 即為對象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對象的語句中。
    析構(gòu)函數(shù):析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對象結(jié)束其生命周期時(shí)(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做"清理善后" 的工作(例如在建立對象時(shí)用new開辟了一片內(nèi)存空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。
    。。。。。。。。。。。。
    PHP 類定義
    PHP 定義類通常語法格式如下:
    <?php
    class phpClass {
    var $var1;
    var $var2 = "constant string";

    function myfunc ($arg1, $arg2) {
    [..]
    }
    [..]
    }
    ?>
    解析如下:
    類使用 class 關(guān)鍵字后加上類名定義。
    類名后的一對大括號(hào)({})內(nèi)可以定義變量和方法。
    類的變量使用 var 來聲明, 變量也可以初始化值。
    函數(shù)定義類似 PHP 函數(shù)的定義,但函數(shù)只能通過該類及其實(shí)例化的對象訪問。
    。。。。。。。。。。。。。
    PHP 中創(chuàng)建對象
    類創(chuàng)建后,我們可以使用 new 運(yùn)算符來實(shí)例化該類的對象:
    $runoob = new Site;
    $taobao = new Site;
    $google = new Site;
    以上代碼我們創(chuàng)建了三個(gè)對象,三個(gè)對象各自都是獨(dú)立的
    。。。。。。。。。。。。。
    調(diào)用成員方法
    在實(shí)例化對象后,我們可以使用該對象調(diào)用成員方法,該對象的成員方法只能操作該對象的成員變量
    。。。。。。。。。。。。。
    PHP 構(gòu)造函數(shù)
    構(gòu)造函數(shù)是一種特殊的方法。主要用來在創(chuàng)建對象時(shí)初始化對象, 即為對象成員變量賦初始值,在創(chuàng)建對象的語句中與 new 運(yùn)算符一起使用。
    PHP 5 允許開發(fā)者在一個(gè)類中定義一個(gè)方法作為構(gòu)造函數(shù),語法格式如右所示:void construct ([ mixed $args [, $... ]] )
    。。。。。。。。。。。。。
    析構(gòu)函數(shù)
    析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對象結(jié)束其生命周期時(shí)(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。
    PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,其語法格式如右所示:void
    destruct ( void )
    。。。。。。。。。。。。。
    繼承
    PHP 使用關(guān)鍵字 extends 來繼承一個(gè)類,PHP 不支持多繼承,格式如下:
    class Child extends Parent {
    // 代碼部分
    }
    。。。。。。。。。。。。
    方法重寫
    如果從父類繼承的方法不能滿足子類的需求,可以對其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重寫。
    。。。。。。。。。。。。
    訪問控制
    PHP 對屬性或方法的訪問控制,是通過在前面添加關(guān)鍵字 public(公有),protected(受保護(hù))或 private(私有)來實(shí)現(xiàn)的。
    public(公有):公有的類成員可以在任何地方被訪問。
    protected(受保護(hù)):受保護(hù)的類成員則可以被其自身以及其子類和父類訪問。
    private(私有):私有的類成員則只能被其定義所在的類訪問。
    屬性的訪問控制
    類屬性必須定義為公有,受保護(hù),私有之一。如果用 var 定義,則被視為公有。
    方法的訪問控制
    類中的方法可以被定義為公有,私有或受保護(hù)。如果沒有設(shè)置這些關(guān)鍵字,則該方法默認(rèn)為公有。
    。。。。。。。。。。。
    接口
    使用接口(interface),可以指定某個(gè)類必須實(shí)現(xiàn)哪些方法,但不需要定義這些方法的具體內(nèi)容。
    接口是通過 interface 關(guān)鍵字來定義的,就像定義一個(gè)標(biāo)準(zhǔn)的類一樣,但其中定義所有的方法都是空的。
    接口中定義的所有方法都必須是公有,這是接口的特性。
    要實(shí)現(xiàn)一個(gè)接口,使用 implements 操作符。類中必須實(shí)現(xiàn)接口中定義的所有方法,否則會(huì)報(bào)一個(gè)致命錯(cuò)誤。類可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)來分隔多個(gè)接口的名稱。
    。。。。。。。。。。。
    常量
    可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時(shí)候不需要使用 $ 符號(hào)。
    常量的值必須是一個(gè)定值,不能是變量,類屬性,數(shù)學(xué)運(yùn)算的結(jié)果或函數(shù)調(diào)用。
    自 PHP 5.3.0 起,可以用一個(gè)變量來動(dòng)態(tài)調(diào)用類。但該變量的值不能為關(guān)鍵字(如 self,parent 或 static)。
    。。。。。。。。。。。
    抽象類
    任何一個(gè)類,如果它里面至少有一個(gè)方法是被聲明為抽象的,那么這個(gè)類就必須被聲明為抽象的。
    定義為抽象的類不能被實(shí)例化。
    被定義為抽象的方法只是聲明了其調(diào)用方式(參數(shù)),不能定義其具體的功能實(shí)現(xiàn)。
    繼承一個(gè)抽象類的時(shí)候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。例如某個(gè)抽象方法被聲明為受保護(hù)的,那么子類中實(shí)現(xiàn)的方法就應(yīng)該聲明為受保護(hù)的或者公有的,而不能定義為私有的。
    。。。。。。。。。。。。
    Static 關(guān)鍵字
    聲明類屬性或方法為 static(靜態(tài)),就可以不實(shí)例化類而直接訪問。
    靜態(tài)屬性不能通過一個(gè)類已實(shí)例化的對象來訪問(但靜態(tài)方法可以)。
    由于靜態(tài)方法不需要通過對象即可調(diào)用,所以偽變量 $this 在靜態(tài)方法中不可用。
    靜態(tài)屬性不可以由對象通過 -> 操作符來訪問。
    自 PHP 5.3.0 起,可以用一個(gè)變量來動(dòng)態(tài)調(diào)用類。但該變量的值不能為關(guān)鍵字 self,parent 或 static。
    。。。。。。。。。。。。
    Final 關(guān)鍵字
    PHP 5 新增了一個(gè) final 關(guān)鍵字。如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個(gè)類被聲明為 final,則不能被繼承。
    。。。。。。。。。。。。
    調(diào)用父類構(gòu)造方法
    PHP 不會(huì)在子類的構(gòu)造方法中自動(dòng)的調(diào)用父類的構(gòu)造方法。要執(zhí)行父類的構(gòu)造方法,需要在子類的構(gòu)造方法中調(diào)用 parent::__construct() 。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 表單和用戶輸入
    PHP 中的 $_GET 和 $_POST 變量用于檢索表單中的信息,比如用戶輸入。
    。。。。。。。。。。。。
    PHP 表單處理,有一點(diǎn)很重要的事情值得注意,當(dāng)處理 HTML 表單時(shí),PHP 能把來自 HTML 頁面中的表單元素自動(dòng)變成可供 PHP 腳本使用。
    。。。。。。。。。。。。
    PHP 獲取下拉菜單的數(shù)據(jù)
    PHP 下拉菜單單選
    以下實(shí)例我們設(shè)置了下拉菜單三個(gè)選項(xiàng),表單使用 GET 方式獲取數(shù)據(jù),action 屬性值為空表示提交到當(dāng)前腳本,我們可以通過 select 的 name 屬性獲取下拉菜單的值:
    php_form_select.php 文件代碼:
    <?php
    $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
    if($q) {
    if($q =='RUNOOB') {
    echo '菜鳥教程<br>http://www.runoob.com';
    } else if($q =='GOOGLE') {
    echo 'Google 搜索<br>http://www.google.com';
    } else if($q =='TAOBAO') {
    echo '淘寶<br>http://www.taobao.com';
    }
    } else {
    ?>
    <form action="" method="get">
    <select name="q">
    <option value="">選擇一個(gè)站點(diǎn):</option>
    <option value="RUNOOB">Runoob</option>
    <option value="GOOGLE">Google</option>
    <option value="TAOBAO">Taobao</option>
    </select>
    <input type="submit" value="提交">
    </form>
    <?php
    }
    ?>
    。。。。。。。。。。。。。
    PHP 下拉菜單多選
    如果下拉菜單是多選的( multiple="multiple"),我們可以通過將設(shè)置 select name="q[]" 以數(shù)組的方式獲取,以下使用 POST 方式提交
    。。。。。。。。。。。。。
    單選按鈕表單
    PHP 單選按鈕表單中 name 屬性的值是一致的,value 值是不同的
    。。。。。。。。。。。。
    checkbox 復(fù)選框
    PHP checkbox 復(fù)選框可以選擇多個(gè)值:
    。。。。。。。。。。。。
    $_GET、$_POST 和 $_REQUEST 的區(qū)別?
    $_GET 變量接受所有以 get 方式發(fā)送的請求,及瀏覽器地址欄中的 ? 之后的內(nèi)容。
    $_POST 變量接受所有以 post 方式發(fā)送的請求,例如,一個(gè) form 以 method=post 提交,提交后 php 會(huì)處理 post 過來的全部變量。
    $_REQUEST 支持兩種方式發(fā)送過來的請求,即 post 和 get 它都可以接受,顯示不顯示要看傳遞方法,get 會(huì)顯示在 url 中(有字符數(shù)限制),post 不會(huì)在 url 中顯示,可以傳遞任意多的數(shù)據(jù)(只要服務(wù)器支持)。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 表單驗(yàn)證
    表單驗(yàn)證
    我們應(yīng)該盡可能的對用戶的輸入進(jìn)行驗(yàn)證(通過客戶端腳本)。瀏覽器驗(yàn)證速度更快,并且可以減輕服務(wù)器的壓力。
    如果用戶輸入需要插入數(shù)據(jù)庫,您應(yīng)該考慮使用服務(wù)器驗(yàn)證。在服務(wù)器驗(yàn)證表單的一種好的方式是,把表單的數(shù)據(jù)傳給當(dāng)前頁面(異步提交的方式更好),而不是跳轉(zhuǎn)到不同的頁面。這樣用戶就可以在同一張表單頁面得到錯(cuò)誤信息。用戶也就更容易發(fā)現(xiàn)錯(cuò)誤了。如何使用PHP驗(yàn)證客戶端提交的表單數(shù)據(jù)。
    。。。。。。。。。。。
    PHP 表單驗(yàn)證
    在處理PHP表單時(shí)我們需要考慮安全性。PHP表單數(shù)據(jù)安全處理,為了防止×××及垃圾信息我們需要對表單進(jìn)行數(shù)據(jù)安全驗(yàn)證。
    一般表單驗(yàn)證如下:
    名字 必須。 +只能包含字母和空格
    E-mail 必須。 + 必須是一個(gè)有效的電子郵件地址(包含'@'和'.')
    網(wǎng)址 可選。如果存在,它必須包含一個(gè)有效的URL
    備注 可選。多行輸入字段(文本域)
    性別 必須。 必須選擇一個(gè)
    。。。。。。。。。。。。
    表單使用 method="post" 方法來提交數(shù)據(jù)。
    。。。。。。。。。。。。
    什么是 $_SERVER["PHP_SELF"] 變量?
    $_SERVER["PHP_SELF"]是超級(jí)全局變量,返回當(dāng)前正在執(zhí)行腳本的文件名,與 document root相關(guān)。
    所以, $_SERVER["PHP_SELF"] 會(huì)發(fā)送表單數(shù)據(jù)到當(dāng)前頁面,而不是跳轉(zhuǎn)到不同的頁面。
    。。。。。。。。。。。。
    什么是 htmlspecialchars()方法?
    htmlspecialchars() 函數(shù)把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體。
    預(yù)定義的字符是:
    & (和號(hào)) 成為 &
    " (雙引號(hào)) 成為 "
    ' (單引號(hào)) 成為 '
    < (小于) 成為 <

    (大于) 成為 >
    。。。。。。。。。。。。
    PHP表單中需引起注重的地方?
    $_SERVER["PHP_SELF"] 變量有可能會(huì)被×××使用!
    當(dāng)×××使用跨網(wǎng)站腳本的HTTP鏈接來×××?xí)r,$_SERVER["PHP_SELF"]服務(wù)器變量也會(huì)被植入腳本。原因就是跨網(wǎng)站腳本是附在執(zhí)行文件的路徑后面的,因此$_SERVER["PHP_SELF"]的字符串就會(huì)包含HTTP鏈接后面的JavaScript程序代碼。
    XSS又叫 CSS (Cross-Site Script) ,跨站腳本×××。惡意×××者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。
    指定以下表單文件名為 "test_form.php":
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    現(xiàn)在,我們使用URL來指定提交地址 "test_form.php",以上代碼修改為如下所示:
    <form method="post" action="test_form.php">
    這樣做就很好了。
    但是,考慮到用戶會(huì)在瀏覽器地址欄中輸入以下地址:
    http://www.runoob.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
    以上的 URL 中,將被解析為如下代碼并執(zhí)行:
    <form method="post" action="test_form.php/"><script>alert('hacked')</script>
    代碼中添加了 script 標(biāo)簽,并添加了alert命令。 當(dāng)頁面載入時(shí)會(huì)執(zhí)行該Javascript代碼(用戶會(huì)看到彈出框)。 這僅僅只是一個(gè)簡單的實(shí)例來說明PHP_SELF變量會(huì)被×××利用。
    請注意, 任何JavaScript代碼可以添加在<script>標(biāo)簽中! ×××可以利用這點(diǎn)重定向頁面到另外一臺(tái)服務(wù)器的頁面上,頁面 代碼文件中可以保護(hù)惡意代碼,代碼可以修改全局變量或者獲取用戶的表單數(shù)據(jù)。
    。。。。。。。。。。。。。
    如何避免 $_SERVER["PHP_SELF"] 被利用?
    $_SERVER["PHP_SELF"] 可以通過 htmlspecialchars() 函數(shù)來避免被利用。
    form 代碼如下所示:
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    htmlspecialchars() 把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體?,F(xiàn)在如果用戶想利用 PHP_SELF 變量, 結(jié)果將輸出如下所示:
    <form method="post" action="test_form.php/"><script>alert('hacked')</script>">
    嘗試該漏洞失敗!
    。。。。。。。。。。。。。
    使用 PHP 驗(yàn)證表單數(shù)據(jù)
    首先我們對用戶所有提交的數(shù)據(jù)都通過 PHP 的 htmlspecialchars() 函數(shù)處理。
    當(dāng)我們使用 htmlspecialchars() 函數(shù)時(shí),在用戶嘗試提交以下文本域:
    <script>location.href('http://www.runoob.com')</script>
    該代碼將不會(huì)被執(zhí)行,因?yàn)樗鼤?huì)被保存為HTML轉(zhuǎn)義代碼,如下所示:
    <script>location.href('http://www.runoob.com')</script>
    以上代碼是安全的,可以正常在頁面顯示或者插入郵件中。
    當(dāng)用戶提交表單時(shí),我們將做以下兩件事情:

  4. 使用 PHP trim() 函數(shù)去除用戶輸入數(shù)據(jù)中不必要的字符 (如:空格,tab,換行)。
  5. 使用PHP stripslashes()函數(shù)去除用戶輸入數(shù)據(jù)中的反斜杠 ()
    接下來讓我們將這些過濾的函數(shù)寫在一個(gè)我們自己定義的函數(shù)中,這樣可以大大提高代碼的復(fù)用性。
    將函數(shù)命名為 test_input()。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 表單 - 必需字段
    字段 驗(yàn)證規(guī)則
    名字 必需。 + 只能包含字母和空格
    E-mail 必需。 + 必需包含一個(gè)有效的電子郵件地址(包含"@"和".")
    網(wǎng)址 可選。 如果存在,它必需包含一個(gè)有效的URL
    備注 可選。多行字段(文本域)。
    性別 必需。必需選擇一個(gè)。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 表單 - 驗(yàn)證郵件和URL
    現(xiàn)在我們來學(xué)如何驗(yàn)證 names(名稱), e-mails(郵件), 和 URLs。
    。。。。。。。。。。。。
    PHP - 驗(yàn)證名稱
    以下代碼將通過簡單的方式來檢測 name 字段是否包含字母和空格,如果 name 字段值不合法,將輸出錯(cuò)誤信息:
    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
    $nameErr = "只允許字母和空格";
    }
    。。。。。。。。。。。。
    preg_match — 進(jìn)行正則表達(dá)式匹配。
    語法:int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
    在 subject 字符串中搜索與 pattern 給出的正則表達(dá)式相匹配的內(nèi)容。如果提供了 matches ,則其會(huì)被搜索的結(jié)果所填充。$matches[0] 將包含與整個(gè)模式匹配的文本,$matches[1] 將包含與第一個(gè)捕獲的括號(hào)中的子模式所匹配的文本,以此類推。
    。。。。。。。。。。。。
    PHP - 驗(yàn)證郵件
    以下代碼將通過簡單的方式來檢測 e-mail 地址是否合法。如果 e-mail 地址不合法,將輸出錯(cuò)誤信息:
    $email = test_input($_POST["email"]);
    if (!preg_match("/([\w-]+\@[\w-]+.[\w-]+)/",$email)) {
    $emailErr = "非法郵箱格式";
    }
    。。。。。。。。。。。
    PHP - 驗(yàn)證 URL
    以下代碼將檢測URL地址是否合法 (以下正則表達(dá)式運(yùn)行URL中含有破折號(hào):"-"), 如果 URL 地址不合法,將輸出錯(cuò)誤信息:
    $website = test_input($_POST["website"]);
    if (!preg_match("/\b(?:(?:https?
    ftp):\/\/ www.)[-a-z0-9+&@#\/%?=~_ !:,.;]*[-a-z0-9+&@#\/%=~_ ]/i",$website)) {
    $websiteErr = "非法的 URL 的地址";
    }

    PHP $_GET 變量
    在 PHP 中,預(yù)定義的 $_GET 變量用于收集來自 method="get" 的表單中的值。
    從帶有 GET 方法的表單發(fā)送的信息,對任何人都是可見的(會(huì)顯示在瀏覽器的地址欄),并且對發(fā)送信息的量也有限制。
    。。。。。。。。。。。
    何時(shí)使用 method="get"?
    在 HTML 表單中使用 method="get" 時(shí),所有的變量名和值都會(huì)顯示在 URL 中。
    注釋:所以在發(fā)送密碼或其他敏感信息時(shí),不應(yīng)該使用這個(gè)方法!
    然而,正因?yàn)樽兞匡@示在 URL 中,因此可以在收藏夾中收藏該頁面。在某些情況下,這是很有用的。
    注釋:HTTP GET 方法不適合大型的變量值。它的值是不能超過 2000 個(gè)字符的。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP $_POST 變量
    在 PHP 中,預(yù)定義的 $_POST 變量用于收集來自 method="post" 的表單中的值。
    。。。。。。。。。。。
    $_POST 變量
    預(yù)定義的 $_POST 變量用于收集來自 method="post" 的表單中的值。
    從帶有 POST 方法的表單發(fā)送的信息,對任何人都是不可見的(不會(huì)顯示在瀏覽器的地址欄),并且對發(fā)送信息的量也沒有限制。
    注釋:然而,默認(rèn)情況下,POST 方法的發(fā)送信息的量最大值為 8 MB(可通過設(shè)置 php.ini 文件中的 post_max_size 進(jìn)行更改)。
    。。。。。。。。。。。
    何時(shí)使用 method="post"?
    從帶有 POST 方法的表單發(fā)送的信息,對任何人都是不可見的,并且對發(fā)送信息的量也沒有限制。
    然而,由于變量不顯示在 URL 中,所以無法把頁面加入書簽。
    。。。。。。。。。。。
    PHP $_REQUEST 變量
    預(yù)定義的 $_REQUEST 變量包含了 $_GET、$_POST 和 $_COOKIE 的內(nèi)容。
    $_REQUEST 變量可用來收集通過 GET 和 POST 方法發(fā)送的表單數(shù)據(jù)。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 多維數(shù)組
    一個(gè)數(shù)組中的值可以是另一個(gè)數(shù)組,另一個(gè)數(shù)組的值也可以是一個(gè)數(shù)組。依照這種方式,我們可以創(chuàng)建二維或者三維數(shù)組
    。。。。。。。。。
    PHP - 多維數(shù)組
    多維數(shù)組是包含一個(gè)或多個(gè)數(shù)組的數(shù)組。
    在多維數(shù)組中,主數(shù)組中的每一個(gè)元素也可以是一個(gè)數(shù)組,子數(shù)組中的每一個(gè)元素也可以是一個(gè)數(shù)組。
    。。。。。。。。。
    輸出方式其中的一種:
    echo $#['#'][0] . '地址為:' . $#['#'][1];
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP date() 函數(shù)
    PHP date() 函數(shù)用于格式化時(shí)間/日期。
    。。。。。。。。。
    PHP date() 函數(shù)
    PHP date() 函數(shù)可把時(shí)間戳格式化為可讀性更好的日期和時(shí)間。
    Tip時(shí)間戳是一個(gè)字符序列,表示一定的事件發(fā)生的日期/時(shí)間。
    語法:string date ( string $format [, int $timestamp ] )
    參數(shù) 描述
    format 必需。規(guī)定時(shí)間戳的格式。
    timestamp 可選。規(guī)定時(shí)間戳。默認(rèn)是當(dāng)前的日期和時(shí)間。
    。。。。。。。。。。
    PHP Date() - 格式化日期
    date() 函數(shù)的第一個(gè)必需參數(shù) format 規(guī)定了如何格式化日期/時(shí)間。
    這里列出了一些可用的字符:
    d - 代表月中的天 (01 - 31)
    m - 代表月 (01 - 12)
    Y - 代表年 (四位數(shù))
    。。。。。。。。。。
    format 字符 說明 返回值例子
    日 --- ---
    d 月份中的第幾天,有前導(dǎo)零的 2 位數(shù)字 01 到 31
    D 星期中的第幾天,文本表示,3 個(gè)字母 Mon 到 Sun
    j 月份中的第幾天,沒有前導(dǎo)零 1 到 31
    l ("L"的小寫字母) 星期幾,完整的文本格式 Sunday 到 Saturday
    N ISO-8601 格式數(shù)字表示的星期中的第幾天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
    S 每月天數(shù)后面的英文后綴,2 個(gè)字符 st,nd,rd 或者 th。可以和 j 一起用
    w 星期中的第幾天,數(shù)字表示 0(表示星期天)到 6(表示星期六)
    z 年份中的第幾天 0 到 365
    星期 --- ---
    W ISO-8601 格式年份中的第幾周,每周從星期一開始(PHP 4.1.0 新加的) 例如:42(當(dāng)年的第 42 周)
    月 --- ---
    F 月份,完整的文本格式,例如 January 或者 March January 到 December
    m 數(shù)字表示的月份,有前導(dǎo)零 01 到 12
    M 三個(gè)字母縮寫表示的月份 Jan 到 Dec
    n 數(shù)字表示的月份,沒有前導(dǎo)零 1 到 12
    t 給定月份所應(yīng)有的天數(shù) 28 到 31
    年 --- ---
    L 是否為閏年 如果是閏年為 1,否則為 0
    o ISO-8601 格式年份數(shù)字。這和 Y 的值相同,只除了如果 ISO 的星期數(shù)(W)屬于前一年或下一年,則用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
    Y 4 位數(shù)字完整表示的年份 例如:1999 或 2003
    y 2 位數(shù)字表示的年份 例如:99 或 03
    時(shí)間 --- ---
    a 小寫的上午和下午值 am 或 pm
    A 大寫的上午和下午值 AM 或 PM
    B Swatch Internet 標(biāo)準(zhǔn)時(shí) 000 到 999
    g 小時(shí),12 小時(shí)格式,沒有前導(dǎo)零 1 到 12
    G 小時(shí),24 小時(shí)格式,沒有前導(dǎo)零 0 到 23
    h 小時(shí),12 小時(shí)格式,有前導(dǎo)零 01 到 12
    H 小時(shí),24 小時(shí)格式,有前導(dǎo)零 00 到 23
    i 有前導(dǎo)零的分鐘數(shù) 00 到 59>
    s 秒數(shù),有前導(dǎo)零 00 到 59>
    u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函數(shù)總是返回 000000 因?yàn)樗唤邮?integer 參數(shù), 而 DateTime::format() 才支持毫秒。 示例: 654321
    時(shí)區(qū) --- ---
    e 時(shí)區(qū)標(biāo)識(shí)(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores
    I 是否為夏令時(shí) 如果是夏令時(shí)為 1,否則為 0
    O 與格林威治時(shí)間相差的小時(shí)數(shù) 例如:+0200
    P 與格林威治時(shí)間(GMT)的差別,小時(shí)和分鐘之間有冒號(hào)分隔(PHP 5.1.3 新加) 例如:+02:00
    T 本機(jī)所在的時(shí)區(qū) 例如:EST,MDT(【譯者注】在 Windows 下為完整文本格式,例如"Eastern Standard Time",中文版會(huì)顯示"中國標(biāo)準(zhǔn)時(shí)間")。
    Z 時(shí)差偏移量的秒數(shù).UTC 西邊的時(shí)區(qū)偏移量總是負(fù)的,UTC 東邊的時(shí)區(qū)偏移量總是正的。 -43200 到 43200
    完整的日期/時(shí)間 --- ---
    c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
    r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
    U 從 Unix 紀(jì)元(January 1 1970 00:00:00 GMT)開始至今的秒數(shù) 參見 time()
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 包含文件
    PHP include 和 require 語句
    在 PHP 中,您可以在服務(wù)器執(zhí)行 PHP 文件之前在該文件中插入一個(gè)文件的內(nèi)容。
    include 和 require 語句用于在執(zhí)行流中插入寫在其他文件中的有用的代碼。
    。。。。。。。。。。。
    include 和 require 除了處理錯(cuò)誤的方式不同之外,在其他方面都是相同的:
    require 生成一個(gè)致命錯(cuò)誤(E_COMPILE_ERROR),在錯(cuò)誤發(fā)生后腳本會(huì)停止執(zhí)行。
    include 生成一個(gè)警告(E_WARNING),在錯(cuò)誤發(fā)生后腳本會(huì)繼續(xù)執(zhí)行。
    因此,如果您希望繼續(xù)執(zhí)行,并向用戶輸出結(jié)果,即使包含文件已丟失,那么請使用 include。否則,在框架、CMS 或者復(fù)雜的 PHP 應(yīng)用程序編程中,請始終使用 require 向執(zhí)行流引用關(guān)鍵文件。這有助于提高應(yīng)用程序的安全性和完整性,在某個(gè)關(guān)鍵文件意外丟失的情況下。
    包含文件省去了大量的工作。這意味著您可以為所有網(wǎng)頁創(chuàng)建標(biāo)準(zhǔn)頁頭、頁腳或者菜單文件。然后,在頁頭需要更新時(shí),您只需更新這個(gè)頁頭包含文件即可。
    語法:
    include 'filename';
    或者
    require 'filename';
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 文件處理
    fopen() 函數(shù)用于在 PHP 中打開文件。
    。。。。。。。。。
    打開文件
    fopen() 函數(shù)用于在 PHP 中打開文件。
    此函數(shù)的第一個(gè)參數(shù)含有要打開的文件的名稱,第二個(gè)參數(shù)規(guī)定了使用哪種模式來打開文件:
    <?php
    $file=fopen("welcome.txt","r");
    ?>
    文件可能通過下列模式來打開:
    模式 描述
    r 只讀。在文件的開頭開始。
    r+ 讀/寫。在文件的開頭開始。
    w 只寫。打開并清空文件的內(nèi)容;如果文件不存在,則創(chuàng)建新文件。
    w+ 讀/寫。打開并清空文件的內(nèi)容;如果文件不存在,則創(chuàng)建新文件。
    a 追加。打開并向文件末尾進(jìn)行寫操作,如果文件不存在,則創(chuàng)建新文件。
    a+ 讀/追加。通過向文件末尾寫內(nèi)容,來保持文件內(nèi)容。
    x 只寫。創(chuàng)建新文件。如果文件已存在,則返回 FALSE 和一個(gè)錯(cuò)誤。
    x+ 讀/寫。創(chuàng)建新文件。如果文件已存在,則返回 FALSE 和一個(gè)錯(cuò)誤。
    注釋:如果 fopen() 函數(shù)無法打開指定文件,則返回 0 (false)。
    。。。。。。。。。。。
    關(guān)閉文件
    fclose() 函數(shù)用于關(guān)閉打開的文件:
    <?php
    $file = fopen("test.txt","r");
    //執(zhí)行一些代碼
    fclose($file);
    ?>
    。。。。。。。。。。
    檢測文件末尾(EOF)
    feof() 函數(shù)檢測是否已到達(dá)文件末尾(EOF)。
    在循環(huán)遍歷未知長度的數(shù)據(jù)時(shí),feof() 函數(shù)很有用。
    注釋:在 w 、a 和 x 模式下,您無法讀取打開的文件!
    if (feof($file)) echo "文件結(jié)尾";
    。。。。。。。。。。
    逐行讀取文件
    fgets() 函數(shù)用于從文件中逐行讀取文件。
    注釋:在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一行。
    。。。。。。。。。。
    逐字符讀取文件
    fgetc() 函數(shù)用于從文件中逐字符地讀取文件。
    注釋:在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。
    。。。。。。。。。。
    PHP對逗號(hào)分隔符文件(*.csv)的處理。
    當(dāng)如果你需要處理的數(shù)據(jù)比較少時(shí)可以使用csv文件(這是一類文本文件)存儲(chǔ)數(shù)據(jù)更加便利。
    注意:CSV文本編碼必須和HTML的編碼相同,否則用php寫到HTML中,用戶會(huì)看到亂碼。也可以使用 iconv 轉(zhuǎn)碼函數(shù)進(jìn)行轉(zhuǎn)碼。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 文件上傳
    通過 PHP,可以把文件上傳到服務(wù)器。
    。。。。。。。。。。。。
    創(chuàng)建一個(gè)文件上傳表單
    允許用戶從表單上傳文件是非常有用的。
    。。。。。。。。。。。。
    HTML創(chuàng)建上傳文件表單
    <form> 標(biāo)簽的 enctype 屬性規(guī)定了在提交表單時(shí)要使用哪種內(nèi)容類型。在表單需要二進(jìn)制數(shù)據(jù)時(shí),比如文件內(nèi)容,請使用 "multipart/form-data"。
    <input> 標(biāo)簽的 type="file" 屬性規(guī)定了應(yīng)該把輸入作為文件來處理。舉例來說,當(dāng)在瀏覽器中預(yù)覽時(shí),會(huì)看到輸入框旁邊有一個(gè)瀏覽按鈕。
    注釋:允許用戶上傳文件是一個(gè)巨大的安全風(fēng)險(xiǎn)。請僅僅允許可信的用戶執(zhí)行文件上傳操作。
    。。。。。。。。。。。
    創(chuàng)建上傳腳本
    通過使用 PHP 的全局?jǐn)?shù)組 $_FILES,你可以從客戶計(jì)算機(jī)向遠(yuǎn)程服務(wù)器上傳文件。
    第一個(gè)參數(shù)是表單的 input name,第二個(gè)下標(biāo)可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:
    $_FILES["file"]["name"] - 上傳文件的名稱
    $_FILES["file"]["type"] - 上傳文件的類型
    $_FILES["file"]["size"] - 上傳文件的大小,以字節(jié)計(jì)
    $_FILES["file"]["tmp_name"] - 存儲(chǔ)在服務(wù)器的文件的臨時(shí)副本的名稱
    $_FILES["file"]["error"] - 由文件上傳導(dǎo)致的錯(cuò)誤代碼
    這是一種非常簡單文件上傳方式。基于安全方面的考慮,您應(yīng)當(dāng)增加有關(guān)允許哪些用戶上傳文件的限制。
    。。。。。。。。。。。
    上傳限制
    保存被上傳的文件
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP Cookie
    cookie 常用于識(shí)別用戶。
    。。。。。。。。。。。
    Cookie 是什么?
    cookie 常用于識(shí)別用戶。cookie 是一種服務(wù)器留在用戶計(jì)算機(jī)上的小文件。每當(dāng)同一臺(tái)計(jì)算機(jī)通過瀏覽器請求頁面時(shí),這臺(tái)計(jì)算機(jī)將會(huì)發(fā)送 cookie。通過 PHP,您能夠創(chuàng)建并取回 cookie 的值。
    。。。。。。。。。。。
    如何創(chuàng)建 Cookie?
    setcookie() 函數(shù)用于設(shè)置 cookie。
    注釋:setcookie() 函數(shù)必須位于 <html> 標(biāo)簽之前。
    語法:setcookie(name, value, expire, path, domain);
    注釋:在發(fā)送 cookie 時(shí),cookie 的值會(huì)自動(dòng)進(jìn)行 URL 編碼,在取回時(shí)進(jìn)行自動(dòng)解碼。(為防止 URL 編碼,請使用 setrawcookie() 取而代之。)
    。。。。。。。。。。。
    如何取回 Cookie 的值?
    PHP 的 $_COOKIE 變量用于取回 cookie 的值。
    。。。。。。。。。。。
    如何刪除 Cookie?
    當(dāng)刪除 cookie 時(shí),您應(yīng)當(dāng)使過期日期變更為過去的時(shí)間點(diǎn)。
    。。。。。。。。。。。
    如果瀏覽器不支持 Cookie 該怎么辦?
    如果您的應(yīng)用程序需要與不支持 cookie 的瀏覽器打交道,那么您不得不使用其他的辦法在您的應(yīng)用程序中的頁面之間傳遞信息。一種方式是通過表單傳遞數(shù)據(jù)
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP Session
    PHP session 變量用于存儲(chǔ)關(guān)于用戶會(huì)話(session)的信息,或者更改用戶會(huì)話(session)的設(shè)置。Session 變量存儲(chǔ)單一用戶的信息,并且對于應(yīng)用程序中的所有頁面都是可用的。
    。。。。。。。。。。。。
    PHP Session 變量
    您在計(jì)算機(jī)上操作某個(gè)應(yīng)用程序時(shí),您打開它,做些更改,然后關(guān)閉它。這很像一次對話(Session)。計(jì)算機(jī)知道您是誰。它清楚您在何時(shí)打開和關(guān)閉應(yīng)用程序。然而,在因特網(wǎng)上問題出現(xiàn)了:由于 HTTP 地址無法保持狀態(tài),Web 服務(wù)器并不知道您是誰以及您做了什么。
    PHP session 解決了這個(gè)問題,它通過在服務(wù)器上存儲(chǔ)用戶信息以便隨后使用(比如用戶名稱、購買商品等)。然而,會(huì)話信息是臨時(shí)的,在用戶離開網(wǎng)站后將被刪除。如果您需要永久存儲(chǔ)信息,可以把數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中。
    Session 的工作機(jī)制是:為每個(gè)訪客創(chuàng)建一個(gè)唯一的 id (UID),并基于這個(gè) UID 來存儲(chǔ)變量。UID 存儲(chǔ)在 cookie 中,或者通過 URL 進(jìn)行傳導(dǎo)。
    。。。。。。。。。。。。
    開始 PHP Session
    在您把用戶信息存儲(chǔ)到 PHP session 中之前,首先必須啟動(dòng)會(huì)話。
    注釋:session_start() 函數(shù)必須位于 <html> 標(biāo)簽之前
    。。。。。。。。。。。。
    存儲(chǔ) Session 變量
    存儲(chǔ)和取回 session 變量的正確方法是使用 PHP $_SESSION 變量
    。。。。。。。。。。。。
    銷毀 Session
    如果您希望刪除某些 session 數(shù)據(jù),可以使用 unset() 或 session_destroy() 函數(shù)。
    unset() 函數(shù)用于釋放指定的 session 變量
    您也可以通過調(diào)用 session_destroy() 函數(shù)徹底銷毀 session
    注釋:session_destroy() 將重置 session,您將失去所有已存儲(chǔ)的 session 數(shù)據(jù)。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 發(fā)送電子郵件
    PHP 允許您從腳本直接發(fā)送電子郵件。
    。。。。。。。。。。。。。
    PHP mail() 函數(shù)
    PHP mail() 函數(shù)用于從腳本中發(fā)送電子郵件。
    語法:mail(to,subject,message,headers,parameters)
    to 必需。規(guī)定 email 接收者。
    subject 必需。規(guī)定 email 的主題。注釋:該參數(shù)不能包含任何新行字符。
    message 必需。定義要發(fā)送的消息。應(yīng)使用 LF (\n) 來分隔各行。每行應(yīng)該限制在 70 個(gè)字符內(nèi)。
    headers 可選。規(guī)定附加的標(biāo)題,比如 From、Cc 和 Bcc。應(yīng)當(dāng)使用 CRLF (\r\n) 分隔附加的標(biāo)題。
    parameters 可選。對郵件發(fā)送程序規(guī)定額外的參數(shù)。
    注釋:PHP 運(yùn)行郵件函數(shù)需要一個(gè)已安裝且正在運(yùn)行的郵件系統(tǒng)(如:sendmail、postfix、qmail等)。所用的程序通過在 php.ini 文件中的配置設(shè)置進(jìn)行定義。
    。。。。。。。。。。。。。。
    PHP 簡易 E-Mail,通過 PHP 發(fā)送電子郵件的最簡單的方式是發(fā)送一封文本 email。
    。。。。。。。。。。。。。。
    PHP Mail 表單,通過 PHP,您能夠在自己的站點(diǎn)制作一個(gè)反饋表單。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP Secure(安全) E-mails
    。。。。。。。。。。
    PHP 防止 E-mail 注入,防止 e-mail 注入的最好方法是對輸入進(jìn)行驗(yàn)證。
    我們使用了 PHP 過濾器來對輸入進(jìn)行驗(yàn)證:
    FILTER_SANITIZE_EMAIL 過濾器從字符串中刪除電子郵件的非法字符
    FILTER_VALIDATE_EMAIL 過濾器驗(yàn)證電子郵件地址的值
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 錯(cuò)誤處理
    在 PHP 中,默認(rèn)的錯(cuò)誤處理很簡單。一條錯(cuò)誤消息會(huì)被發(fā)送到瀏覽器,這條消息帶有文件名、行號(hào)以及描述錯(cuò)誤的消息。
    。。。。。。。。。。
    PHP 錯(cuò)誤處理
    在創(chuàng)建腳本和 Web 應(yīng)用程序時(shí),錯(cuò)誤處理是一個(gè)重要的部分。如果您的代碼缺少錯(cuò)誤檢測編碼,那么程序看上去很不專業(yè),也為安全風(fēng)險(xiǎn)敞開了大門。
    線面是一些最為重要的錯(cuò)誤檢測方法。
    將為您講解不同的錯(cuò)誤處理方法:
    簡單的 "die()" 語句
    自定義錯(cuò)誤和錯(cuò)誤觸發(fā)器
    錯(cuò)誤報(bào)告
    。。。。。。。。。。
    基本的錯(cuò)誤處理:使用 die() 函數(shù)
    。。。。。。。。。。
    創(chuàng)建自定義錯(cuò)誤處理器
    創(chuàng)建一個(gè)自定義的錯(cuò)誤處理器非常簡單。我們很簡單地創(chuàng)建了一個(gè)專用函數(shù),可以在 PHP 中發(fā)生錯(cuò)誤時(shí)調(diào)用該函數(shù)。
    該函數(shù)必須有能力處理至少兩個(gè)參數(shù) (error level 和 error message),但是可以接受最多五個(gè)參數(shù)(可選的:file, line-number 和 error context):
    語法:
    error_function(error_level,error_message,
    error_file,error_line,error_context)
    error_level 必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤報(bào)告級(jí)別。必須是一個(gè)數(shù)字。參見下面的表格:錯(cuò)誤報(bào)告級(jí)別。
    error_message 必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤消息。
    error_file 可選。規(guī)定錯(cuò)誤發(fā)生的文件名。
    error_line 可選。規(guī)定錯(cuò)誤發(fā)生的行號(hào)。
    error_context 可選。規(guī)定一個(gè)數(shù)組,包含了當(dāng)錯(cuò)誤發(fā)生時(shí)在用的每個(gè)變量以及它們的值。
    。。。。。。。。。。。
    錯(cuò)誤報(bào)告級(jí)別,這些錯(cuò)誤報(bào)告級(jí)別是用戶自定義的錯(cuò)誤處理程序處理的不同類型的錯(cuò)誤
    值 常量 描述
    2 E_WARNING 非致命的 run-time 錯(cuò)誤。不暫停腳本執(zhí)行。
    8 E_NOTICE run-time 通知。在腳本發(fā)現(xiàn)可能有錯(cuò)誤時(shí)發(fā)生,但也可能在腳本正常運(yùn)行時(shí)發(fā)生。
    256 E_USER_ERROR 致命的用戶生成的錯(cuò)誤。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_ERROR。
    512 E_USER_WARNING 非致命的用戶生成的警告。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_WARNING。
    1024 E_USER_NOTICE 用戶生成的通知。這類似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_NOTICE。
    4096 E_RECOVERABLE_ERROR 可捕獲的致命錯(cuò)誤。類似 E_ERROR,但可被用戶定義的處理程序捕獲。(參見 set_error_handler())
    8191 E_ALL 所有錯(cuò)誤和警告。(在 PHP 5.4 中,E_STRICT 成為 E_ALL 的一部分)
    。。。。。。。。。。。。
    設(shè)置錯(cuò)誤處理程序
    PHP 的默認(rèn)錯(cuò)誤處理程序是內(nèi)建的錯(cuò)誤處理程序。我們打算把上面的函數(shù)改造為腳本運(yùn)行期間的默認(rèn)錯(cuò)誤處理程序。
    可以修改錯(cuò)誤處理程序,使其僅應(yīng)用到某些錯(cuò)誤,這樣腳本就能以不同的方式來處理不同的錯(cuò)誤。
    。。。。。。。。。。。。
    觸發(fā)錯(cuò)誤
    在腳本中用戶輸入數(shù)據(jù)的位置,當(dāng)用戶的輸入無效時(shí)觸發(fā)錯(cuò)誤是很有用的。在 PHP 中,這個(gè)任務(wù)由 trigger_error() 函數(shù)完成。
    可能的錯(cuò)誤類型:
    E_USER_ERROR - 致命的用戶生成的 run-time 錯(cuò)誤。錯(cuò)誤無法恢復(fù)。腳本執(zhí)行被中斷。
    E_USER_WARNING - 非致命的用戶生成的 run-time 警告。腳本執(zhí)行不被中斷。
    E_USER_NOTICE - 默認(rèn)。用戶生成的 run-time 通知。在腳本發(fā)現(xiàn)可能有錯(cuò)誤時(shí)發(fā)生,但也可能在腳本正常運(yùn)行時(shí)發(fā)生。
    。。。。。。。。。。。。
    錯(cuò)誤記錄
    在默認(rèn)的情況下,根據(jù)在 php.ini 中的 error_log 配置,PHP 向服務(wù)器的記錄系統(tǒng)或文件發(fā)送錯(cuò)誤記錄。通過使用 error_log() 函數(shù),您可以向指定的文件或遠(yuǎn)程目的地發(fā)送錯(cuò)誤記錄。
    通過電子郵件向您自己發(fā)送錯(cuò)誤消息,是一種獲得指定錯(cuò)誤的通知的好辦法。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 異常處理,異常用于在指定的錯(cuò)誤發(fā)生時(shí)改變腳本的正常流程。
    。。。。。。。。。。。。
    異常是什么
    PHP 5 提供了一種新的面向?qū)ο蟮腻e(cuò)誤處理方法。
    異常處理用于在指定的錯(cuò)誤(異常)情況發(fā)生時(shí)改變腳本的正常流程。這種情況稱為異常。
    當(dāng)異常被觸發(fā)時(shí),通常會(huì)發(fā)生:
    當(dāng)前代碼狀態(tài)被保存
    代碼執(zhí)行被切換到預(yù)定義(自定義)的異常處理器函數(shù)
    根據(jù)情況,處理器也許會(huì)從保存的代碼狀態(tài)重新開始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本
    我們將展示不同的錯(cuò)誤處理方法:
    異常的基本使用
    創(chuàng)建自定義的異常處理器
    多個(gè)異常
    重新拋出異常
    設(shè)置頂層異常處理器
    注釋:異常應(yīng)該僅僅在錯(cuò)誤情況下使用,而不應(yīng)該用于在一個(gè)指定的點(diǎn)跳轉(zhuǎn)到代碼的另一個(gè)位置。
    。。。。。。。。。。。。
    異常的基本使用
    當(dāng)異常被拋出時(shí),其后的代碼不會(huì)繼續(xù)執(zhí)行,PHP 會(huì)嘗試查找匹配的 "catch" 代碼塊。
    如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應(yīng)的處理的話,那么將發(fā)生一個(gè)嚴(yán)重的錯(cuò)誤(致命錯(cuò)誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯(cuò)誤消息。
    。。。。。。。。。。。。
    Try、throw 和 catch
    要避免上面實(shí)例中出現(xiàn)的錯(cuò)誤,我們需要?jiǎng)?chuàng)建適當(dāng)?shù)拇a來處理異常。
    適當(dāng)?shù)奶幚懋惓4a應(yīng)該包括:
    Try - 使用異常的函數(shù)應(yīng)該位于 "try" 代碼塊內(nèi)。如果沒有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行。但是如果異常被觸發(fā),會(huì)拋出一個(gè)異常。
    Throw - 里規(guī)定如何觸發(fā)異常。每一個(gè) "throw" 必須對應(yīng)至少一個(gè) "catch"。
    Catch - "catch" 代碼塊會(huì)捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對象。
    。。。。。。。。。。。。
    創(chuàng)建一個(gè)自定義的 Exception 類
    創(chuàng)建自定義的異常處理程序非常簡單。我們簡單地創(chuàng)建了一個(gè)專門的類,當(dāng) PHP 中發(fā)生異常時(shí),可調(diào)用其函數(shù)。該類必須是 exception 類的一個(gè)擴(kuò)展。
    這個(gè)自定義的 customException 類繼承了 PHP 的 exception 類的所有屬性,您可向其添加自定義的函數(shù)。
    。。。。。。。。。。。。
    多個(gè)異常
    可以為一段腳本使用多個(gè)異常,來檢測多種情況。
    可以使用多個(gè) if..else 代碼塊,或一個(gè) switch 代碼塊,或者嵌套多個(gè)異常。這些異常能夠使用不同的 exception 類,并返回不同的錯(cuò)誤消息
    。。。。。。。。。。。。
    重新拋出異常
    有時(shí),當(dāng)異常被拋出時(shí),您也許希望以不同于標(biāo)準(zhǔn)的方式對它進(jìn)行處理??梢栽谝粋€(gè) "catch" 代碼塊中再次拋出異常。
    腳本應(yīng)該對用戶隱藏系統(tǒng)錯(cuò)誤。對程序員來說,系統(tǒng)錯(cuò)誤也許很重要,但是用戶對它們并不感興趣。為了讓用戶更容易使用,您可以再次拋出帶有對用戶比較友好的消息的異常
    。。。。。。。。。。。。
    設(shè)置頂層異常處理器
    set_exception_handler() 函數(shù)可設(shè)置處理所有未捕獲異常的用戶定義函數(shù)。
    。。。。。。。。。。。。
    異常的規(guī)則
    需要進(jìn)行異常處理的代碼應(yīng)該放入 try 代碼塊內(nèi),以便捕獲潛在的異常。
    每個(gè) try 或 throw 代碼塊必須至少擁有一個(gè)對應(yīng)的 catch 代碼塊。
    使用多個(gè) catch 代碼塊可以捕獲不同種類的異常。
    可以在 try 代碼塊內(nèi)的 catch 代碼塊中拋出(再次拋出)異常。
    簡而言之:如果拋出了異常,就必須捕獲它。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 過濾器
    PHP 過濾器用于驗(yàn)證和過濾來自非安全來源的數(shù)據(jù),比如用戶的輸入。
    。。。。。。。。。。。。
    什么是 PHP 過濾器?
    PHP 過濾器用于驗(yàn)證和過濾來自非安全來源的數(shù)據(jù)。
    測試、驗(yàn)證和過濾用戶輸入或自定義數(shù)據(jù)是任何 Web 應(yīng)用程序的重要組成部分。
    PHP 的過濾器擴(kuò)展的設(shè)計(jì)目的是使數(shù)據(jù)過濾更輕松快捷。
    。。。。。。。。。。。。
    為什么使用過濾器?
    幾乎所有的 Web 應(yīng)用程序都依賴外部的輸入。這些數(shù)據(jù)通常來自用戶或其他應(yīng)用程序(比如 web 服務(wù))。通過使用過濾器,您能夠確保應(yīng)用程序獲得正確的輸入類型。
    您應(yīng)該始終對外部數(shù)據(jù)進(jìn)行過濾!
    輸入過濾是最重要的應(yīng)用程序安全課題之一。
    什么是外部數(shù)據(jù)?
    來自表單的輸入數(shù)據(jù)
    Cookies
    Web services data(服務(wù)數(shù)據(jù))
    服務(wù)器變量
    數(shù)據(jù)庫查詢結(jié)果
    。。。。。。。。。。。。。。
    函數(shù)和過濾器
    如需過濾變量,請使用下面的過濾器函數(shù)之一:
    filter_var() - 通過一個(gè)指定的過濾器來過濾單一的變量
    filter_var_array() - 通過相同的或不同的過濾器來過濾多個(gè)變量
    filter_input - 獲取一個(gè)輸入變量,并對它進(jìn)行過濾
    filter_input_array - 獲取多個(gè)輸入變量,并通過相同的或不同的過濾器對它們進(jìn)行過濾
    。。。。。。。。。。。。。。
    Validating 和 Sanitizing
    有兩種過濾器:
    Validating 過濾器:
    用于驗(yàn)證用戶輸入
    嚴(yán)格的格式規(guī)則(比如 URL 或 E-Mail 驗(yàn)證)
    如果成功則返回預(yù)期的類型,如果失敗則返回 FALSE
    Sanitizing 過濾器:
    用于允許或禁止字符串中指定的字符
    無數(shù)據(jù)格式規(guī)則
    始終返回字符串
    。。。。。。。。。。。。。
    選項(xiàng)和標(biāo)志
    選項(xiàng)和標(biāo)志用于向指定的過濾器添加額外的過濾選項(xiàng)。
    不同的過濾器有不同的選項(xiàng)和標(biāo)志。
    。。。。。。。。。。。。。
    驗(yàn)證輸入
    讓我們試著驗(yàn)證來自表單的輸入。
    我們需要做的第一件事情是確認(rèn)是否存在我們正在查找的輸入數(shù)據(jù)。
    然后我們用 filter_input() 函數(shù)過濾輸入的數(shù)據(jù)。
    。。。。。。。。。。。。。
    凈化輸入
    讓我們試著清理一下從表單傳來的 URL。
    首先,我們要確認(rèn)是否存在我們正在查找的輸入數(shù)據(jù)。
    然后,我們用 filter_input() 函數(shù)來凈化輸入數(shù)據(jù)。
    。。。。。。。。。。。。。
    過濾多個(gè)輸入
    表單通常由多個(gè)輸入字段組成。為了避免對 filter_var 或 filter_input 函數(shù)重復(fù)調(diào)用,我們可以使用 filter_var_array 或 the filter_input_array 函數(shù)。
    。。。。。。。。。。。。。
    使用 Filter Callback
    通過使用 FILTER_CALLBACK 過濾器,可以調(diào)用自定義的函數(shù),把它作為一個(gè)過濾器來使用。這樣,我們就擁有了數(shù)據(jù)過濾的完全控制權(quán)。
    您可以創(chuàng)建自己的自定義函數(shù),也可以使用已存在的 PHP 函數(shù)。
    將您準(zhǔn)備用到的過濾器的函數(shù),按指定選項(xiàng)的規(guī)定方法進(jìn)行規(guī)定。在關(guān)聯(lián)數(shù)組中,帶有名稱 "options"。
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 高級(jí)過濾器
    。。。。。。。。。。
    檢測一個(gè)數(shù)字是否在一個(gè)范圍內(nèi)
    。。。。。。。。。。
    檢測 IPv6 地址
    。。。。。。。。。。
    檢測 URL - 必須包含QUERY_STRING(查詢字符串)
    。。。。。。。。。。
    移除 ASCII 值大于 127 的字符
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP JSON
    我們將為大家介紹如何使用 PHP 語言來編碼和解碼 JSON 對象。
    。。。。。。。。。。
    環(huán)境配置,在 php5.2.0 及以上版本已經(jīng)內(nèi)置 JSON 擴(kuò)展。
    。。。。。。。。。。
    JSON 函數(shù)
    函數(shù) 描述
    json_encode 對變量進(jìn)行 JSON 編碼
    json_decode 對 JSON 格式的字符串進(jìn)行解碼,轉(zhuǎn)換為 PHP 變量
    json_last_error 返回最后發(fā)生的錯(cuò)誤
    。。。。。。。。。。
    json_encode
    PHP json_encode() 用于對變量進(jìn)行 JSON 編碼,該函數(shù)如果執(zhí)行成功返回 JSON 數(shù)據(jù),否則返回 FALSE 。
    語法:string json_encode ( $value [, $options = 0 ] )
    參數(shù)
    value: 要編碼的值。該函數(shù)只對 UTF-8 編碼的數(shù)據(jù)有效。
    options:由以下常量組成的二進(jìn)制掩碼:
    JSON_HEX_QUOT
    JSON_HEX_TAG
    JSON_HEX_AMP
    JSON_HEX_APOS
    JSON_NUMERIC_CHECK
    JSON_PRETTY_PRINT
    JSON_UNESCAPED_SLASHES
    JSON_FORCE_OBJECT
    。。。。。。。。。。。
    json_decode
    PHP json_decode() 函數(shù)用于對 JSON 格式的字符串進(jìn)行解碼,并轉(zhuǎn)換為 PHP 變量。
    語法:mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
    參數(shù)
    json_string: 待解碼的 JSON 字符串,必須是 UTF-8 編碼數(shù)據(jù)
    assoc : 當(dāng)該參數(shù)為 TRUE 時(shí),將返回?cái)?shù)組,F(xiàn)ALSE 時(shí)返回對象。
    depth : 整數(shù)類型的參數(shù),它指定遞歸深度
    options : 二進(jìn)制掩碼,目前只支持 JSON_BIGINT_AS_STRING 。
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    PHP 7 新特性
    PHP 7+ 版本極大地改進(jìn)了性能,在一些WordPress基準(zhǔn)測試當(dāng)中,性能可以達(dá)到PHP 5.6的3倍。
    PHP 7+ 版本新加特性如下表所示:
    序號(hào) 內(nèi)容
    1 PHP 標(biāo)量類型與返回值類型聲明
    2 PHP NULL 合并運(yùn)算符
    3 PHP 太空船運(yùn)算符(組合比較符)
    4 PHP 常量數(shù)組
    5 PHP 匿名類
    6 PHP Closure::call()
    7 PHP 過濾 unserialize()
    8 PHP IntlChar()
    9 PHP CSPRNG
    10 PHP 7 異常
    11 PHP 7 use 語句
    12 PHP 7 錯(cuò)誤處理
    13 PHP intdiv() 函數(shù)
    14 PHP 7 Session 選項(xiàng)
    15 PHP 7 廢棄特性
    16 PHP 7 移除的擴(kuò)展
    17 PHP 7 移除的 SAPI

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP 數(shù)據(jù)庫
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PHP MySQL 簡介
通過 PHP,您可以連接和操作數(shù)據(jù)庫。
MySQL 是跟 PHP 配套使用的最流行的開源數(shù)據(jù)庫系統(tǒng)。
。。。。。。。。。。。。。
MySQL 是什么?
MySQL 是一種在 Web 上使用的數(shù)據(jù)庫系統(tǒng)。
MySQL 是一種在服務(wù)器上運(yùn)行的數(shù)據(jù)庫系統(tǒng)。
MySQL 不管在小型還是大型應(yīng)用程序中,都是理想的選擇。
MySQL 是非常快速,可靠,且易于使用的。
MySQL 支持標(biāo)準(zhǔn)的 SQL。
MySQL 在一些平臺(tái)上編譯。
MySQL 是免費(fèi)下載使用的。
MySQL 是由 Oracle 公司開發(fā)、發(fā)布和支持的。
MySQL 是以公司創(chuàng)始人 Monty Widenius's daughter: My 命名的。
MySQL 中的數(shù)據(jù)存儲(chǔ)在表中。表格是一個(gè)相關(guān)數(shù)據(jù)的集合,它包含了列和行。
在分類存儲(chǔ)信息時(shí),數(shù)據(jù)庫非常有用。一個(gè)公司的數(shù)據(jù)庫可能擁有以下表:
Employees
Products
Customers
Orders
。。。。。。。。。
PHP + MySQL
PHP 與 MySQL 結(jié)合是跨平臺(tái)的。(您可以在 Windows 上開發(fā),在 Unix 平臺(tái)上應(yīng)用。)
。。。。。。。。。
查詢
查詢是一種詢問或請求。
通過 MySQL,我們可以向數(shù)據(jù)庫查詢具體的信息,并得到返回的記錄集。
請看下面的查詢(使用標(biāo)準(zhǔn) SQL):
mysql> set names utf8;
mysql> SELECT name FROM websites;
+---------------+
name
+---------------+
Google
淘寶
菜鳥教程
微博
Facebook
stackoverflow
+---------------+
6 rows in set (0.00 sec)
語句 set names utf8;用于設(shè)定數(shù)據(jù)庫編碼,讓中文可以正常顯示。
上面的查詢選取了 "websites" 表中 "name" 列的所有數(shù)據(jù)。
。。。。。。。。。。。
下載 MySQL 數(shù)據(jù)庫
如果您的 PHP 服務(wù)器沒有 MySQL 數(shù)據(jù)庫,可以在此免費(fèi)下載 MySQL: http://www.mysql.com。
。。。。。。。。。。。
關(guān)于 MySQL 數(shù)據(jù)庫的事實(shí)
關(guān)于 MySQL 的一點(diǎn)很棒的特性是,可以對它進(jìn)行縮減,來支持嵌入的數(shù)據(jù)庫應(yīng)用程序。也許正因?yàn)槿绱?,許多人認(rèn)為 MySQL 僅僅能處理中小型的系統(tǒng)。
事實(shí)上,對于那些支持巨大數(shù)據(jù)和訪問量的網(wǎng)站(比如 Friendster、Yahoo、Google),MySQL 是事實(shí)上的標(biāo)準(zhǔn)數(shù)據(jù)庫。

PHP 連接 MySQL
PHP 5 及以上版本建議使用以下方式連接 MySQL :
MySQLi extension ("i" 意為 improved)
PDO (PHP Data Objects)
在 PHP 早期版本中我們使用 MySQL 擴(kuò)展。但該擴(kuò)展在 2012 年開始不建議使用。
。。。。。。。。。。。。。。。。
我是該用 MySQLi ,還是 PDO?
如果你需要一個(gè)簡短的回答,即 "你習(xí)慣哪個(gè)就用哪個(gè)"。
MySQLi 和 PDO 有它們自己的優(yōu)勢:
PDO 應(yīng)用在 12 種不同數(shù)據(jù)庫中, MySQLi 只針對 MySQL 數(shù)據(jù)庫。
所以,如果你的項(xiàng)目需要在多種數(shù)據(jù)庫中切換,建議使用 PDO ,這樣你只需要修改連接字符串和部分查詢語句即可。 使用 MySQLi, 如果不同數(shù)據(jù)庫,你需要重新編寫所有代碼,包括查詢。
兩者都是面向?qū)ο? 但 MySQLi 還提供了 API 接口。
兩者都支持預(yù)處理語句。 預(yù)處理語句可以防止 SQL 注入,對于 web 項(xiàng)目的安全性是非常重要的。
。。。。。。。。。。。。。。。。
MySQLi 和 PDO 連接 MySQL 實(shí)例
我們會(huì)使用以下三種方式來演示 PHP 操作 MySQL:
MySQLi (面向?qū)ο?
MySQLi (面向過程)
PDO
。。。。。。。。。。。。。。。
MySQLi 安裝,Linux 和 Windows: 在 php5 mysql 包安裝時(shí) MySQLi 擴(kuò)展多數(shù)情況下是自動(dòng)安裝的??梢酝ㄟ^ phpinfo() 查看是否安裝成功
安裝詳細(xì)信息,請查看: http://php.net/manual/en/mysqli.installation.php
。。。。。。。。。。。。。。。
PDO 安裝,可以通過 phpinfo() 查看是否安裝成功
PDO 安裝詳細(xì)信息,請查看: http://php.net/manual/en/pdo.installation.php
。。。。。。。。。。。。。。。
連接 MySQL
在我們訪問 MySQL 數(shù)據(jù)庫前,我們需要先連接到數(shù)據(jù)庫服務(wù)器

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI