PHP是一門後端動態解釋型計算機高級語言,通常用來編寫或者生成動態網頁,主要負責數據的處理與渲染。(這裏是指用PHP嵌入網頁裏面的形式,如今能夠直接用一些JS的框架去渲染網頁數據了,PHP主要用來作數據處理)php
在學習PHP以前,你須要瞭解HTML,最好有C語言或者C++,Python等其餘高級語言基礎html
PHP通常須要與web服務器軟件一塊兒使用,如Apache,Nginx,IIS這些服務器軟件,固然這些軟件首先須要配置好PHP環境。推薦使用phpstudy這個軟件在你的電腦上建立本身的PHP學習環境,點擊下載phpstudy,若是連接失效請到http://www.phpstudy.net/自行搜索下載python
推薦一個更加方便的集成環境工具,laragon.exe能夠很方便的部署php開發環境而且可以自動完成虛擬主機的配置下載連接web
1.下載完成後解壓到D:\phpstudy\目錄下數據庫
2.打開phpstudy這個軟件,會自動開啓Apache的web服務和MySQL數據庫服務,若是都爲綠色的點表示服務開啓成功 編程
3.在瀏覽器地址欄輸入localhost按下回車,出現下面這個網頁表示安裝成功 後端
4.在D:\phpstudy\www\目錄裏面放入你寫的PHP文件,如我放入一個叫作test.php的文件,該文件內容以下面HelloWorld標題代碼所示數組
5.在瀏覽器地址欄輸入localhost/test.php,按下回車鍵便可打開該網頁,輸出了Hello World 瀏覽器
像下面這樣直接嵌入網頁中輸出HelloWorld,直接用echo指令輸出到網頁上服務器
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php
echo "Hello World";
?>
</body>
</html>
複製代碼
這個文件必須保存爲.php文件,不能保存爲.html文件,不然裏面的 這一段不會被解析
能夠看出,在php文件裏面含有html代碼時PHP的代碼片斷以 「<?php
」 開始以 「 ?>
」結束,若是php文件裏面不含任何HTML的代碼,則只須要寫 <?php
跟大多數編程語言同樣
// 用在單行註釋
/* 和 */ 用在多行註釋
用$後面跟上變量名初始化和使用變量,如:
<?php
$x=5;
$y=6;
$s="Hello World!";
$z=$x+$y;
echo $z.$s; //輸出11Hello World
?>
複製代碼
能夠看出PHP是一種弱類型的語言,用$聲明的變量既能夠是數字也能夠是字符串等其餘的數據類型,其中字符串的鏈接符是用" . ",能夠將多個字符鏈接起來,如
<?php
$x = "Hello";
$y = 'World';
$z = $x.$y;
echo $z; //輸出HelloWorld
複製代碼
細心的朋友會注意到$y = 'World'; 這一句用的是單引號,其實PHP裏面單引號和雙引號均可以表示字符串,可是必需要成對出現。
PHP的語句和變量是嚴格區分大小寫的,神奇的是,PHP還有不少特殊的全局變量,對於程序的編寫有很大的便利,將在後面說明
PHP中的常量使用 define() 函數,函數語法以下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
複製代碼
其中,
name : 常量名(不須要加$符號)
value : 常量的值(能夠爲任意數據類型)
case_insensitive: 默認爲false區分大小寫,若爲true則不區分常量名的大小寫 如:
<?php
define("PI",3.14);
$r = 2;
echo PI*$r*$r; //輸出 12.56
複製代碼
PHP中有以下幾種數據類型: String(字符串), Integer(整型), Float(浮點型), Boolean(布爾型), Array(數組), Object(對象), NULL(空值) 前三種前面已經使用過了,簡單介紹下字符串和後面幾種,關於對象後面再詳細說明:
經常使用字符串的處理函數
strlen() : 獲取字符串長度
$s = "Hello World!";
echo strlen($s); //輸出12
複製代碼
特別的,對於中文來講
<?php
echo strlen("你好世界"); // 輸出 12
複製代碼
由於在默認編碼下一個中文佔3個字符數,可使用mb_strlen()指定編碼輸出
<?php
echo mb_strlen("你好世界","utf-8"); // 輸出 4
複製代碼
strpos() : 在字符串內查找一個字符或一段指定的文本。 若是在字符串中找到匹配,該函數會返回第一個匹配的字符位置。若是未找到匹配,則返回 false。
<?php
echo strpos("Hello world!","world"); // 輸出6
複製代碼
md5() : 計算字符串的 MD5 散列,一般用於簡單加密
<?php
echo md5("password"); //輸出5f4dcc3b5aa765d61d8327deb882cf99
複製代碼
true 和 false 兩個值 例如:
<?php
$x = true;
var_dump($x); //輸出bool(true)
複製代碼
var_dump() 函數返回變量的數據類型和值
PHP中用函數 array() 來建立數組,其中有索引數組,關聯數組,多維數據 索引數組(用從0開始的下標表示數組裏面對應的值)
<?php
$student = array("Kevin","Bob","Tom");
echo $student[0]." Love ".$student[2]; //輸出Kevin Love Tom
複製代碼
可使用函數count(
student的長度爲3
關聯數組 (含有鍵值對" key => value "的數組,每一個value值都有它的key值)
<?php
$age = array("Kevin"=>18,"Bob"=>26,"Tom"=>17);
echo $age['Kevin']; //輸出18
複製代碼
多維數組
<?php
$sites = array
(
"runoob"=>array
(
"百度",
"http://www.baidu.com"
),
"google"=>array
(
"Google 搜索",
"http://www.google.com"
),
"taobao"=>array
(
"淘寶",
"http://www.taobao.com"
)
);
echo $sites['taobao'][1]; //輸出http://www.taobao.com
複製代碼
對於數組的排序,能夠看下這個教程 www.runoob.com/php/php-arr…
NULL 值表示變量沒有值。能夠經過將變量賦值爲空值來清空變量數據。
PHP裏面的不少運算符其實跟C語言同樣的,因此沒有不少要講的,其中注意一下下面這些運算符:
運算符 | 做用說明 |
---|---|
. | 點號,並置運算符,用於鏈接字符串 |
=== | 絕對等於,用於判斷,表示兩個變量類型和值都相等 |
+ | 即表示數學上算術相加,也能夠用在兩個數組鏈接 |
對運算符不是很瞭解的能夠看看這個教程:www.runoob.com/php/php-ope…
if 語句 - 在條件成立時執行代碼 if...else 語句 - 在條件成立時執行一塊代碼,條件不成立時執行另外一塊代碼 if...elseif....else 語句 - 在若干條件之一成立時執行一個代碼塊 switch 語句 - 在若干條件之一成立時執行一個代碼塊 特別地,要記得在switch語句裏面用break;跳出每個選項。
像C語言同樣的循環 while - 只要指定的條件成立,則循環執行代碼塊 do...while - 首先執行一次代碼塊,而後在指定的條件成立時重複這個循環 for - 循環執行代碼塊指定的次數 着重說一下PHP特有的foreach循環: foreach主要是用來遍歷數組的,以下所示:
<?php
$age = array("Kevin"=>18,"Bob"=>26,"Tom"=>17);
foreach ($age as $name=>$a )
{
echo $name."的年齡爲".$a."<br>";
}
/*輸出 Kevin的年齡爲18 Bob的年齡爲26 Tom的年齡爲17 */
複製代碼
PHP像這樣聲明一個函數
<?php
function 函數名(參數列表) {
// 要執行的代碼
}
複製代碼
參數能夠有默認值,函數的返回值用return直接返回,能夠返回任意數據類型的返回值
函數的變量做用域: 如在下面的程序中
<?php
$x=5; // 全局變量
function myTest() {
$y=10; // 局部變量
echo "變量 x 爲: $x"; //會報錯Notice: Undefined variable: x in D:\phpstudy\WWW\test.php on line 6
echo "<br>"; //換行
echo "變量 y 爲: $y"; //輸出變量y爲:5
}
myTest();
複製代碼
爲何第6行代碼會報錯呢?由於在函數內部裏面是不能直接訪問全局變量y也只能在函數內部起做用,若是須要在函數內使用全局變量,則須要先在函數內聲明,使用global指令
<?php
$x=5; // 全局變量
function myTest() {
global $x; //聲明全局變量$x
$y=10; // 局部變量
echo "變量 x 爲: $x"; //輸出變量x爲:5
echo "<br>"; //換行
echo "變量 y 爲: $y"; //輸出變量y爲:5
}
myTest();
複製代碼
__FILE__
: 文件的完整路徑和文件名。 __LINE__
: 文本中的當前行號。 __DIR__
:文件所在當前目錄。 __FUNCTION__
:用在函數裏面,返回函數的名字。 __CLASS__
:用在類裏面,返回類的名字。 __NAMESPACE__
:返回當前命名空間的名字。
該內容詳見教程:www.runoob.com/php/php-sup…
$GLOBALS
: 是一個關聯數組,任何聲明的全局變量都會保存到這個數組裏面去,該數組的key值是全局變量的名字,value值是全局變量的值
$_SERVER
:是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由Web服務器建立。不能保證每一個服務器都提供所有項目;服務器可能會忽略一些,或者提供一些沒有在這裏列舉出來的項目。
$_REQUEST
:用於收集HTML表單提交的數據。
$_POST
:收集表單經過POST方式上傳的數據(在HTML裏面指定form的method= "POST")
$_GET
:一樣被普遍應用於收集表單數據,也用於URL發送的數據
命名空間是爲了不與PHP內部的類/變量/函數或者第三方類庫名字衝突引入的至關於別名的東西,經過使用不一樣的命名空間和設置別名能夠避免這些衝突。
聲明命名空間: namespace 名稱;
使用命名空間: use 名稱 as 別名;
其中「as 別名」也能夠省略。
通常放到PHP代碼文件的首行。 也能夠在一個文件裏面使用多個命名空間,用 { } 將不一樣的命名空間分開 如:
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // 全局代碼
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
複製代碼
學過C++或者python,Java的話都知道什麼是面向對象編程。
聲明類
<?php
class 類名{
public $變量名; //php中的變量的須要加上修飾符
public function 函數名(){
//函數的內容
}
}
複製代碼
每一個類有一個$this
變量,用來表明對象自己,能夠經過$this
對象調用類的變量或方法。 建立對象使用new關鍵字,以下所示:
<?php
class Student {
function __construct( $name, $age ) { //構造函數
$this->name = $name;
$this->age = $age;
}
}
// 實例化對象
$xiaoming = new Student("xiaoming",18);
echo $xiaoming->age; //輸出18
複製代碼
繼承
使用關鍵字extends表明繼承,如子類繼承父類的形式以下:
<?php
class Child extends Parent {
// 代碼部分
}
複製代碼
訪問控制
public(公有):公有的類成員能夠在任何地方被訪問。
protected(受保護):受保護的類成員則能夠被其自身以及其子類和父類訪問。
private(私有):私有的類成員則只能被其定義所在的類訪問。
抽象類
任何一個類,若是它裏面至少有一個方法是被聲明爲抽象的,那麼這個類就必須被聲明爲抽象的。 定義爲抽象的類不能被實例化。使用關鍵字abstract聲明類,以下
<?php
abstract class ClassName {
//抽象類的內容
}
複製代碼
Static 關鍵字
聲明類屬性或方法爲 static(靜態),就能夠不實例化類而直接訪問。 靜態屬性不能經過一個類已實例化的對象來訪問(但靜態方法能夠)。 因爲靜態方法不須要經過對象便可調用,因此僞變量 $this
在靜態方法中不可用。 靜態屬性不能夠由對象經過 -> 操做符來訪問。
關於PHP的面向對象編程還有不少須要注意的地方,可是可能簡單的網頁後端編程裏面須要掌握的語法基礎就是這些了,能夠多看幾遍「菜鳥教程」的PHP教程:www.runoob.com/php/php-tut…
OK到這裏基本上你已經瞭解了PHP的語法基礎,而後你須要學習的就是PHP的一些標準庫的運用了,好比文件操做,GD圖形庫(製做圖片驗證碼),用PHP進行MySQL數據庫操做等。
爲方便網站服務器後端開發,你能夠嘗試去了解一下PHP的開發框架,好比國內流行的ThinkPHP5,不少特性的Laravel,以及不少人使用的Yii