php基礎語法_物件導向

Sol_9發表於2024-06-13

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->方法名([實參列表]);

步驟

  1. 宣告類結構
  2. 明確類產生的物件是否需要有資料的儲存:確定屬性
  3. 明確類產生的物件是否需要函式實現功能:確定方法
  4. 明確類是否需要定義常量
  5. 物件例項化
  6. 類成員訪問(屬性和方法)

示例

<?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. 宣告類結構
  2. 確定類成員
  3. 確定類成員的訪問位置限定,使用對應訪問修飾限定符
  4. 只能在對應位置訪問被修飾的成員

示例

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;。

相關文章