PHP物件導向

2021-08-28 07:59:23 字數 3059 閱讀 7674

php_object=             #在建立乙個類的新物件時,系統會自動呼叫,完成物件初始化

#在類中,類的構造方法只有乙個

析構函式

class 類         #沒有形式引數

}            #記住,析構函式都是public

$b=$a;

#$a==$b;$a===$b

#物件賦值,是值拷貝,拷貝的不是資料本身,而是物件識別符號,也就是$a(或$b)改變,$b(或$a)也會變;

#但$a="",unset($a)或者$b時,另外一方都不會改變

# 物件導向的三大特徵

# 封裝 、繼承、多型

封裝就是用訪問修飾符來修飾成員方法和成員屬性。從而達到對成員方法和成員屬性的隱藏和訪問控制。

訪問修飾符

public:#被public修飾的成員方法和成員屬性,在類裡和類外都可以被訪問。(公有)

protected:#被public修飾的成員方法和成員屬性,在類裡和子類中都可以被訪問。(受保護)

private:#私有化的成員屬性在類外不可以訪問。(私有)

私有化的成員屬性在類裡可以被訪問。

私有化的成員方法在類外不可以被訪問。

私有化的成員方法在類裡可以被訪問。

魔術方法

__get($屬性名)

#當在類外訪問乙個私有化成員屬性(protected,private)時或該屬性不存在時,魔術方法__get會被自動訪問。因為公有可以直接訪問

__set($屬性名,$屬性值)

#在類外給私有化成員屬性(protected,private)賦值時。魔術方法__set會被自動呼叫。

__isset($屬性名)

# class b 

# $a = new a;

# $b = new b;

# $a2 = new a;

# echo $a instanceof $a; // true

# echo $a instanceof $b; // false

# echo $a instanceof $a2; // true

3、const

- 定義常量(除物件外的其他型別)

- 語法:

變數名字母一般都大寫,可以被子類繼承

const 常量名稱=常量值

- 訪問

類外:類名稱::常量名稱

類裡:self::常量名稱

注: define同樣用於定義常量,但是在類中不能使用

define定義常量在同一作用域下,define()常量名和const定義的常量名不能相同.

命名空間不支援define。不建議使用。

單例模式

1、用途:

防止記憶體空間浪費

2、實際應用

資料庫類例項化。

3、單例模式實現過程

- 禁止類物件在類外被例項化。

將構造方法私有化

- 定義靜態化成員方法,在類裡面例項化類,獲取類物件

- 在類中宣告靜態化成員屬性$obj.

- 在靜態化成員方法中對靜態化成員屬性是否為空進行判斷。

若為空,則例項化類。將例項化後的類物件賦值給靜態化成員屬性

若不為空,則直接返回靜態化成員屬性。

#抽象類

#作用:讓其他人來繼承抽象類,並實現抽象方法

abstract class abstractclass#不能被例項化,也就是不能new,只能被繼承,

abstract protected function getvalue();#強制要求子類定義這些方法,且不能有函式體

abstract protected function prefixvalue($prefix);#引數可以增加

// 普通方法(非抽象方法)

public function printout() concreteclass1";

#介面介面(inte***ce)#定規範,保持統一性;

# 介面不能例項化

# 介面的屬性必須是常量

# 介面的方法必須是public【預設public】,且不能有函式體

# 類必須實現介面的所有方法

# 乙個類可以同時實現多個介面,用逗號隔開

#可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。

inte***ce usb{

const brand = 'siemens';    # 介面的屬性必須是常量

public function connect();  #介面的方法必須是public【預設public】,且不能有函式體

## new usb();  // 介面不能例項化

#類實現介面

class android implements usb{

public function connect(){  # 類必須實現介面的所有方法

echo '實現介面的connect方法';

inte***ce usba{

public function connect();

inte***ce usbb{

public function contact();

# 類可以同時實現多個介面

class mi implements usba,usbb{

public function connect(){

public function contact(){

#類命名空間

#解決類名的重新命名

namespace my;#命名空間,防止重複,就像乙個包廂,之前是客廳

#如需在其他檔案使用該類,兩種寫法:

1:use my\name;#name是類名,有命名空間的一定要寫,否則報錯,use只能引用乙個類

$obj=new name();

2:$obj=new my\name(); # 和上面一樣

#兩種方法都需要首先引入類檔案,原始方法include_once "類.php";

# spl_autoload_register(function ($class_name) {

#     include_once $class_name . '.php';

# 更簡單的方法,自動載入類檔案

PHP物件導向

1 什麼是物件導向 起初,物件導向 是專指在程式設計中採用封裝 繼承 抽象等設計方法。可是,這個定義顯然不能再適合現在情況。物件導向的思想已經涉及到軟體開發的各個方面。如 物件導向的分析 ooa,object oriented analysis 物件導向的設計 ood,object oriented...

php物件導向

smarty自定義函式 作用 用於在模板被執行時為模板變數賦值 函式名稱 assign 引數 var 宣告變數名稱 字串 value 給該變數賦值 字串 tpl assign title this is title 實現自定義函式有兩種 1.註冊自定義函式 3.版本不支援 tpl register ...

php物件導向

一 寫出php的public protected private三種訪問控制模式的區別 public 公有,任何地方都可以訪問 protected 繼承,只能在本類或子類中訪問,在其他地方不允許訪問 private 私有,只能在本類中訪問,在其他地方不允許訪問 二 請用單態設計模式方法設計類滿足要求...