PHP
php程式碼標記
多種標記來區分php指令碼
ASP標記:<% php程式碼 %>
短標記:
指令碼標記:
標準標記(常用):
簡寫風格:
ASP風格:<% php程式碼 %>
注意:簡寫風格和ASP風格需要在php.ini配置檔案中修改以下配置為on,移植性差
short_open_tag = on
asp_tags = on
<html>
<body>
<b>
<?php
//指令碼標記
echo 'hello world';
?>
</b>
</body>
</html>
php註釋
行註釋
//註釋
註釋
塊註釋
/*
註釋
*/
php指令分隔符
;
類似C語言,使用分號來結束指令
php資料型別
型別 | 說明 |
---|---|
boolean布林型 | True and false |
string字串型 | 字元序列 |
integer整型 | 正負整數 |
float浮點型 | 整,小數 |
array陣列 | 一組有序資料集合 |
object物件 | 物件是類的例項,使用new命令建立 |
resource資源 | |
NULL |
$ 是php變數的識別符號,所有變數都以$字元開頭,無論是申明還是呼叫
布林型boolean
直接將true or false賦值給變數即可
<?php
$foo = True
?>
整型
<?php
$a = 1234; //十進位制數
$a = -1234; //複數
$a = 0123; //八進位制,(十進位制83)
$a = 0x1A; //十六進位制(十進位制26)
$a = 0b11111111;//二進位制數字(255)
?>
PHP_INT_MAX 64位下最大值大約為9E18,當整數溢位時,會轉換成科學計數法格式定義的浮點數。
浮點型
<?php
$a = 1.234
$b = 1.2e3; //科學計數法
$c = 7e-10; //科學計數法,負指數
字串
單引號
雙引號
Heredoc結構
複合型別
陣列
物件
特殊型別
資源resource
NULL
PHP模式修飾符
在正則匹配時,用來強化正規表示式的能力
可以寫為/html/i
or /(?i)html/
兩種格式,並且修飾符之間是不需要分隔符號的,直接連續書寫即可
修飾符 | 說 明 |
---|---|
i | 匹配時不區分大小寫 |
m | 將字串視為多行。^和$會匹配每一行的開始和結束點 |
s | 將字串是為一行,換行符會被視為普通的字元 |
x | 忽略空白,轉移的空白不會被忽略 |
e | 只用在preg_replace函式中,在替換字串中逆向引用做正常的替換,將其(即“替換的字串”)作為php程式碼求值,並用結果來替換所搜尋的字串 |
A | 匹配字串的開頭部分 |
D | 如果設定該修飾符,模式中的元字元$僅會匹配目標字串的結尾。沒有此選項時,如果最後一個字元是換行符的話,美元符號也會匹配此字元之前(但不會匹配任何其他換行符之前)。如果設定了m修飾符則忽略此選項 |
E | 與m相反,如果使用該修飾符,那麼$將匹配絕對字串的結尾,而不是換行符前,預設開啟該模式 |
U | 非貪婪模式,與元字元?的作用相等,最大限度的匹配是貪婪模式,最小限度的匹配時非貪婪模式,即惰性模式 |
s | 單行模式 |
物件導向程式設計思想
- 物件導向程式設計不是一種具體的技術,而是一種程式設計思想
- 更方便與程式碼的重複利用
- 一切皆物件
- 所有的資料和功能都由主體(物件)來操作
跟程序導向的區別是,得先new一個物件,再去呼叫函式
物件導向基礎
1.物件導向關鍵字說明
- 類:class,是定義物件主體的最外層結構,用來包裹資料和函式,類是一類具有共性事物的代表。
- 物件:object,是某類事物的具體代表,也是實際資料和功能操作的具體單元,也被稱之為例項(instance)
- 例項化:new,從一個抽象的概念得到一個符合抽象概念的具體例項的過程
- 類成員:member,指class結構中建立的函式,類成員裡有三種
2.物件導向簡單技術實現
類:根據物件分析後得到的一種通用結構(分類)
- class關鍵字宣告
- 類名:自定義名字
- 大括號
class 類名{
}
例項化:類產生物件的過程
new 類名;
new 類名(); #使用更多
物件:根據某個類產生的某個具體存在的實體(instance),物件一般使用變數儲存
$object = new 類名();
步驟:
- 根據需求產生類結構class
- 分析類擁有的資料
- 分析類的行為
示例
<?php
class Ok{
}
class IOS{
}
$n = new Ok();
$m = new IOS();
var_dump($n);
var_dump($m);
?>
# 列印結果:
# object(Ok)#1 (0) { } object(IOS)#2 (0) { }
# object:物件
# 數字是編號,代表第幾個物件
# (Ok):所屬類名
# (0):成員變數(屬性)個數
# {}:具體成員變數資訊(鍵值對)
類的命名規範:
命名規範與函式類似,不能用數字開頭
多單詞用駝峰法:MyClass
3.類成員
目標:瞭解類成員的型別,作用,能夠運用類成員去建立有效類
類成員:
成員訪問:屬性和方法都屬於物件訪問,類常量屬於類訪問
類訪問:
#例項化
$object = new 類名();
# 屬性訪問
$object->屬性名; # 此時不帶屬性本身的$符號(前面儲存-物件的變數帶$符號,object->屬性名是整體)
# 方法訪問
$object->方法名([實參列表]);
步驟
- 宣告類結構
- 明確類產生的物件是否需要有資料的儲存:確定屬性
- 明確類產生的物件是否需要函式實現功能:確定方法
- 明確類是否需要定義常量
- 物件例項化
- 類成員訪問(屬性和方法)
示例
<?php
class Buyer{
public $name;
public $money = 0;
function display(){
echo __CLASS__;
}
}
const BIG_NAME = 'BUYER';
$b = new Buyer();
$b->money = 10;
$b->eyes = 1;
unset($b->name);
var_dump($b);
$b->display();
?>
4.訪問修飾限定符
修飾限定符:用在屬性或者方法前的修飾關鍵字,用來控制屬性或者方法的訪問位置
- 訪問修飾限定符分類
public:公有,類內類外都可以訪問
protected:受保護,只允許在相關類內部訪問
private:私有,只能在類內訪問,為方法準備的
- 屬性必須有訪問修飾限定符,方法可以沒有,預設public
步驟
- 宣告類結構
- 確定類成員
- 確定類成員的訪問位置限定,使用對應訪問修飾限定符
- 只能在對應位置訪問被修飾的成員
示例
1.公有成員訪問
<?php
class Saler{
#屬性
public $count = 100;
#方法
public function getCount(){
echo __METHOD__;
}
public function setCount(){
echo __METHOD__;
}
}
#例項化物件
$s = new Saler();
#訪問(類外)
echo $s->count;
$s->getCount();
$s->setCount();
?>
5.類內部物件
內部物件:$this,方法內部內建 的一個物件
2.類內部訪問類成員,需要透過物件進行訪問
<?php
class Saler{
public $count = 100;
protected $discount = 0.8;
private $money = 100;
public function getAll(){
global $s; # 需要獲取到物件名字:因為方法本身就是函式,訪問外部全域性變數可以透過global引入實現
echo $s->count,$s->discount,$s->money;
}
}
$s = new Saler();
$s->getAll();
?>
3,使用內建物件$this訪問
<?php
class Saler{
public $count = 100;
protected $discount = 0.8;
private $money = 100;
public function getAll(){
#global $s; # 需要獲取到物件名字:因為方法本身就是函式,訪問外部全域性變數可以透過global引入實現
#cho $s->count,$s->discount,$s->money;
var_dump($this);
echo $this->count,$this->discount,$this->money;
}
}
$s = new Saler();
$s->getAll();
?>
$this代表的是物件,$this所在的環境為類內部的方法內部,所以$this物件是在類內部訪問,因此可以訪問所有的屬性和方法,不受訪問修飾限定符限制
6.物件導向的開發規範
- 儘可能的增加類對成員的控制 ,盡多的使用private,少用public
- 屬性通常是私有化的,一般是透過設定方法來實現屬性的訪問和修改
7.構造方法
瞭解魔術方法的概念,明確觸發模式,因為構造方法是魔術方法
構造方法:__construct(),是一種類結構特有的特殊方法,由系統規定好,有了構造方法的類在例項化物件之後,物件就會自動呼叫
- 構造方法是一種魔術方法:魔術方法會被自動觸發,不需要手動呼叫
- 構造方法的目標市實現物件的初始化
物件例項化會自動呼叫
構造方法通常是為了實現物件所需資源的初始化
- 構造方法本質還是一種方法
受訪問修飾限定符控制
物件可以選擇呼叫(一般不會)
- 可以設定形參,對應的實參市在例項化物件的時候傳入:new 類名(實參傳遞給形參)
示例
構造方法實現:
<?php
class Saler{
public fuction __construct(){
echo __CLASS__;
}
}
new Saler();
?>
一旦構造方法擁有了形參,那麼物件在呼叫該方法的時候就應該傳入對應的實參,而構造方法又是自動呼叫的,所以需要在例項化物件的時候使用new類名(構造方法對應的實參列表)來實現
<?php
class Saler{
public $count;
private $money;
public function __construct($count,$money){
echo __CLASS__;
#初始化
$this->count = $count;
$this->money = $money;
}
}
$s1 = new Saler(100,100);
$s2 = new Saler(999,999);
var_dump($s1,$s2);
?>
__construct()允許手動呼叫:
<?php
class Saler{
public $count;
private $money;
public function __construct($count,$money){
echo __CLASS__;
#初始化
$this->count = $count;
$this->money = $money;
}
}
$s1 = new Saler(100,100);
$s2 = new Saler(999,999);
$s2->__construct(0,0); #__construct()允許手動呼叫
var_dump($s1,$s2);
?>
小結
8.析構方法
主動呼叫析構方法
$s ->__destruct();
當主動呼叫析構方法,其實他就是隻是一個普通的方法,不會銷燬物件
析構方法是當物件銷燬的時候呼叫
9.物件傳值
小結:
物件傳值方式是引用傳值,不論物件如何被賦值給其他物件,始終只有一個記憶體地址。
10.範圍解析運算子(類常量訪問)
<?php
#範圍解析運算子
class Saler{
const PI = 3.14;
}
$s1 = new Saler;
#echo $s1; #無法訪問
echo Saler::PI;
echo $s1::PI; #範圍解析運算子相容物件,找到物件所屬類,最終進行訪問
?>
不過我們一般不建議使用echo $s1::PI;。