PHP,百度百科解釋爲一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
在學習之前瞭解一下PHP及其功能:
1、在服務器端運行,WEB網站的大部分數據都是存儲在服務器端的,PHP就是用來處理這些存儲在服務器端的數據的。
2、可以在多個平臺運行,比如Linus、Windows、Unix…
3、它是一種腳本語言,通過編寫腳本來指揮服務器工作。
4、不支持IE9版本以下的瀏覽器。
基本PHP語法
按照慣例,先打出一個Hello,World!
<?php
echo 'Hello,World!';
?>
運行結果爲:
可以看出PHP代碼是寫在<?php 此處是php代碼?>
標籤之間的。
echo是PHP中的輸出語句,可以把字符串輸出(字符串用引號括起來)。
單行註釋(//或#);多行註釋(/*
…*
/)
在 PHP 中,所有用戶定義的函數、類和關鍵詞(例如 if、else、echo 等等)都對大小寫不敏感。但是所有變量都對大小寫敏感。
PHP變量
PHP變量規則
- 變量以 $ 符號開頭,其後是變量的名稱
- 變量名稱必須以字母或下劃線開頭
- 變量名稱不能以數字開頭
- 變量名稱只能包含字母數字字符和下劃線(A-z、0-9 以及 _)
- 變量名稱對大小寫敏感(
$y
與$Y
是兩個不同的變量)
PHP沒有創建變量的命令,變量會在首次爲其賦值時被創建;在創建PHP變量時不必聲明其數據類型,PHP會根據它的值自動把變量轉換爲正確的數據類型;
PHP變量作用域
在PHP中,可以在腳本的任何位置對變量進行聲明,變量的作用域指的是變量能夠被訪問的那部分腳本。PHP有三種不同的作用域:
- local(局部)
- global(全局)
- static(靜態)
Local和Global作用域
函數之外聲明的變量擁有 Global 作用域,只能在函數以外進行訪問。
函數內部聲明的變量擁有 LOCAL 作用域,只能在函數內部進行訪問。
註釋:可以在不同的函數中創建名稱相同的局部變量,因爲局部變量只能被在其中創建它的函數識別。
PHP global關鍵詞
global關鍵詞用於訪問函數內的全局變量。
<?php
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 輸出 15
?>
運行結果爲15,正確!
PHP static 關鍵詞
通常,當函數完成/執行後,會刪除所有變量。不過,有時我需要不刪除某個局部變量。實現這一點需要更進一步的工作。要完成這一點,請在您首次聲明變量時使用 static 關鍵詞:
<?php
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
運行結果:
PHP 數據類型
PHP字符串:
字符串是字符序列,比如 “Hello world!”。字符串可以是引號內的任何文本。您可以使用單引號或雙引號。
PHP 整型:
- 整數必須有至少一個數字(0-9)
- 整數不能有小數點
- 整數正負均可
- 可以用三種格式規定整數:十進制、十六進制(前綴是 0x)或八進制(前綴是 0)
PHP NULL值
特殊的 NULL 值表示變量無值。NULL 是數據類型 NULL 唯一可能的值。
NULL 值標示變量是否爲空。也用於區分空字符串與空值數據庫。
PHP 浮點數、數組、對象(略)
PHP 常量
常量是單個值的標識符(名稱)。在腳本中無法改變該值。有效的常量名以字符或下劃線開頭(常量名稱前面沒有 $ 符號)。
註釋:與變量不同,常量貫穿整個腳本是自動全局的。
如需設置常量,請使用 define() 函數 - 它使用三個參數:
1. 首個參數定義常量的名稱
2. 第二個參數定義常量的值
3. 可選的第三個參數規定常量名是否對大小寫敏感。默認是 false。
PHP 運算符
PHP 字符串運算符
. (串接) $txt1 = "Hello" $txt2 = $txt1 . " world!"
結果爲$txt2=”Hello World”
.=(串接賦值) $txt1 = "Hello" $txt1 .= " world!"
結果爲 $txt1 = “Hello world!”
PHP數組
首先數組分爲一維數組和多維數組,而多維數組中只有二維和三維數組是經常用到的(因爲當維數超過三維便難以理解),二位數組是數組的數組(三維數組是數組的數組的數組)。
一維數組的定義:
索引數組:
索引數組賦值有三種方式:
1、array[0]='蘋果';
2、$arr=array('0'=>'蘋果');
3、$arr=array('蘋果');
索引數組的訪問:$srr = $arr['0'];
(因爲輸出的是索引數組所以$arr[0]也可以將第一個數據取出來,但是如果輸出關聯數組,若不給建加引號就無法輸出,所以爲了不必要的麻煩,給所有的鍵值加引號);
foreach循環
foreach循環只適用於數組,並用於遍歷數組中的每個鍵/值對。
每進行一次循環迭代,當前數組元素的值就會被賦值給 $value
變量,並且數組指針會逐一地移動,直到到達最後一個數組元素。
下面的例子演示的循環將輸出給定數組($colors)的值:
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
注:$colors爲數組,可用count()函數獲得數組的長度。
運行結果爲:
關聯數組(索引和關聯兩個詞都是針對數組的鍵而言的,索引的鍵是整數,而關聯數組的鍵是字符串):
初始化
<?php
$age=array(
"Bill"=>"35", //"Bill"爲鍵,“35”爲值
"Steve"=>"37",
"Peter"=>"43"
);
echo "Peter is " . $age['Peter'] . " years old.";
?>
運行結果:
數組排序
- sort() - 以升序對數組排序
- rsort() - 以降序對數組排序
- asort() - 根據值,以升序對關聯數組進行排序
- ksort() - 根據鍵,以升序對關聯數組進行排序
- arsort() - 根據值,以降序對關聯數組進行排序
- krsort() - 根據鍵,以降序對關聯數組進行排序
PHP函數
自定義函數
簡單實例(與js類似):
<?php
function say() //函數定義
{
echo 'hello world';
}
say();//函數調用
?>
使用return的關鍵字可以使函數返回值。省略return則返回值爲NULL,返回語句會立即中止函數的運行,函數不能返回多個值,但可以通過一個數組來得到類似的效果。
可變函數
所謂可變函數, 即通過變量的值來調用函數,因爲變量的值是可變的,所以通過改變一個變量的值來實現調用不同的函數。經常會用在回調函數、函數列表、或者根據動態參數來調用不同的函數。可變函數的調用方法爲變量名加括號。
function name(){
echo 'jobs';
}
$func = 'name';
$func(); //調用可變函數
可變函數也可以用在對象的方法調用上。
class book{
function getname(){
return 'bookname';
}
}
$func = 'getname';
$book = new book();
$book ->$func();
內置函數
內置函數指的是PHP默認支持的函數,PHP內置了很多標準的常用的處理函數,包括字符串處理、數組函數、文件處理、session與cookies處理等等。
PHP 的真正力量來自它的函數:它擁有超過 1000 個內置的函數。
通過內置函數str_replace可以實現字符串的替換。下面的例子將“jobs”替換成“steven jobs”:
<?php
$str = 'i am jobs.';
$str = str_replace('jobs', 'steven jobs', $str);
echo $str; //結果爲“i am steven jobs”
?>
另外一些函數是通過其他拓展來支持的,比如mysql數據庫處理函數,GD圖像處理函數,郵件處理函數等,PHP默認加載了一些常用的拓展庫,我們可以安裝或者加載其他拓展庫來增加PHP的處理函數。
注:用function_exists判斷函數是否存在,同樣的method_exists可以用來檢測類的方法是否存在。
PHP 類和對象
PHP是面向對象的(即擁有面向對象的一些特性)。
構造函數
PHP5可以在類中使用__construct()定義一個構造函數,具有構造函數的類,會在每次對象創建的時候調用該函數,因此常用來在對象創建的時候進行一些初始化工作。
class Car{
function _construct{
ptint"構造函數被調用\n";
}
}
$car = new Car();//實例化的時候回自動調用構造函數_construc,這裏會輸出一個字符串
注:與c++不同的是,在子類中如果定義了_construc則不會調用父類的_construc,如果需要同時調用父類的構造函數,需要使用parent:_construc()顯式的調用。
同樣,PHP5支持析構函數,使用_destruct()進行定義,析構函數指的是當某個對象的所有引用被刪除,或者對象被顯式的銷燬時會執行的函數。
靜態關鍵字static
使用static修飾的方法稱爲靜態方法,這一點與c++相同,靜態方法屬於類,而不屬於對象,所以調用時使用(類名::方法名)來調用。不允許對象使用->操作符調用。
靜態方法中,$this僞變量不允許使用。可以使用self,parent,static在內部調用方法與屬性。
class Car {
private static $speed = 10;
public static function getSpeed() {
return self::$speed;
}
public static function speedUp() {
return self::$speed+=10;
}
}
class BigCar extends Car {
public static function start() {
parent::speedUp();
}
}
BigCar::start();
echo BigCar::getSpeed();
重載
PHP中的重載是指冬天的創建屬性與方法,是通過魔術方法來實現的。屬性的重載通過_set,_get,_isset,_unset來分別實現對不存在的屬性值、讀取、判斷屬性是否設置、銷燬屬性。
class Car{
private $ary = array();
public function _set($key,$val){
$this->ary[$key] = $val;
}
public function _get($key){
public function _get($key){
if(isset($this->ary[$key])){
return $this->ary[$key];
}
return null;
}
public function _isset($key){
if(isset($this->ary[$key])){return true;}
return false;
}
public fucntion _unset($key){
unset($this->ary[$key]);
}
}
$car = new Car();
$car->name = '汽車';//name屬性動態創建並賦值
echo $car->name;
注:PHP允許我們在雙引號串中直接包含字符串變量,而單引號字符串變量中的內容總被認爲是普通字符。
方法的重載通過_call來實現,當調用不存在的方法的時候,將會轉爲參數調用_call方法,當調用調用不存在的靜態方法時會使用_callStatic重載。
class Car {
public $speed = 0;
public function __call($name, $args) {
if ($name == 'speedUp') {
$this->speed += 10;
}
}
}
$car = new Car();
$car->speedUp(); //調用不存在的方法會使用重載
echo $car->speed;
PHP 全局變量
PHP 全局變量 - 超全局變量
PHP 中的許多預定義變量都是“超全局的”,這意味着它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以訪問它們。
這些超全局變量是:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
$GLOBALS
這種全局變量用於在 PHP 腳本中的任意位置訪問全局變量(從函數或方法中均可)。PHP 在名爲 $GLOBALS[index]
的數組中存儲了所有全局變量。變量的名字就是數組的鍵。
下面的例子展示瞭如何使用超級全局變量 $GLOBALS:
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
運行結果:
PHP $_SERVER
$_SERVER
這種超全局變量保存關於報頭、路徑和腳本位置的信息。
下面的例子展示瞭如何使用 $_SERVER 中的某些元素:
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
運行結果:
PHP $_REQUEST
PHP $_REQUEST
用於收集 HTML 表單提交的數據。
下面的例子展示了一個包含輸入字段及提交按鈕的表單。當用戶通過點擊提交按鈕來提交表單數據時, 表單數據將發送到 標籤的 action 屬性中指定的腳本文件。在這個例子中,我們指定文件本身來處理表單數據。如果您需要使用其他的 PHP 文件來處理表單數據,請修改爲您選擇的文件名即可。然後,我們可以使用超級全局變量 $_REQUEST 來收集 input 字段的值:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
運行結果:
點擊提交結果: