物件導向知識點續及單例模式

2022-05-10 13:22:47 字數 2466 閱讀 9145

命名空間的作用是避免了專案越來越大出現的命名衝突和混亂的問題

命名空間一般與檔案的目錄相對應,第乙個命名空間前面不能有任何**

在不同空間之間不可以直接呼叫其它元素,需要使用命名空間的語法:

<?php 

namespace article;

class

comment

namespace messageboard;

class

comment

//呼叫當前空間(messageboard)的comment類

$comment = new

comment();

//呼叫article空間的comment類

$article_comment = new

\article\comment();

?>

可以看到,在messageboard空間中呼叫article空間裡的comment類時,使用了一種像檔案路徑的語法: \空間名\元素名,除了類之外,對函式和常量的用法是一樣的

最早的php專案都是通過手工include或者require來載入依賴的檔案的,當專案變大時,乙個檔案要依賴很多個php類,就需要寫幾十行require或者include語句,這會導致管理很不方便,也會導致一些錯誤。比如某個類刪除了,但是require這個檔案的語句沒有去掉,會報乙個致命錯誤。這時候可以採用類自動載入的方式處理這種類依賴關係。

<?php 

spl_autoload_register(

function ($class_name

) );

$obj = new

myclass1();

$obj2 = new

myclass2();

?>

之前用的是__autoload() 函式,已經被廢棄

現在大多數框架都支援鏈式查詢,其原理很簡單:每個鏈式操作方法最後都返回當前物件

以下是示例檔案:

//

database.php

function where($where

)

function order($order

)

function limit($limit

)

這樣便可持續呼叫了下乙個方法了。

$db=new

imooc\database();

$db->where("id>20")->order('create_time desc')->limit(10);

4.1、__get、__set方法,將物件的屬性進行接管

一般來說,總是把類的屬性定義為private,這更符合現實的邏輯

但是在類外呼叫乙個未定義或者私有的屬性會報錯,便可以通過__get、__set方法獲取和賦值其屬性

$object=new imooc\object

();

$object->name='zhangsan';

echo $object->name;

<?php 

namespace imooc;

class

object

function __get($key

)

}

4.2、__call、__callstatic ,控制類的方法

方法不存在時自動呼叫,可在報錯時使用,保證**的健壯性

有些類只需要例項化一次,像資料庫連線類,例項化多次的話會浪費資源,這時候就會用到單例模式

簡單的來說是「三私一公」:

構造方法私有化後就不能從外部例項化類了,但是怎麼例項化呢?

就要用到靜態方法了,將其公有化,便可在外部例項化類了,

在方法裡判斷物件是否為空,如果為空就例項化,存在就直接將它返回,這樣便實現了只例項化一次了

<?php 

namespace imooc;

class

database

//私有化__clone,防止被轉殖

private

function

__clone(){}

//公有靜態例項方法

public

static

function

getinstance()

else

}}$obj1=database::getinstance();

$obj2=database::getinstance();

$obj3=database::getinstance();

var_dump($obj1,$obj2,$obj3

);echo

$obj1==$obj2?1:0;

echo "

";echo

$obj1==$obj3?1:0;

列印結果如下:

物件導向 單例模式

設計模式 解決某一類問題行之有效的解決辦法 思想 單例 singleton 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...

物件導向知識點總結

1 物件導向的特徵 物件導向的三個基本特徵是 封裝 繼承 多型。封裝 也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需...

物件導向相關知識點

在了解物件導向程式設計之前首先要先了解程式設計中兩大思想 面向過程 物件導向 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候再乙個乙個的依次呼叫就可以了。舉個栗子 將大象裝進冰箱,面向過程做法 開啟冰箱門 大象裝進去 關上冰箱門 面向過程,就是按照我們分析好了的...