亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php 設計模式 總結 上

發布時間:2020-04-04 17:30:52 來源:網絡 閱讀:393 作者:lijingsan1 欄目:web開發

1 編程選擇等寬字體

2 source code pro 字體

3 運行環境搭建,推薦 easyphp

4 關于命名空間:

面向對象的高級特性

介紹、使用:

namespace test1;

下面的所有代碼都屬于這個命名空間里面的。


調用:test1\funciton_name(); 即可。

5 類自動載入特性

function __autoload($class); // 以前是這么干的。

{

require __DIR__.'/'.$class.'.php';

}

// 后來被廢紙了, 5.3以后用 spl_autoload_register('autoload1');


這樣就不沖突了,防止不同框架之間的沖突。自己隨便定義自動載入函數。


6 基礎框架:

psr-0規范

1 命名空間必須與絕對路徑一致

2 類名首字母大寫

3  除了入口文件外的其它.php文件只有一個類,不能有可執行代碼

開發符合psr-0規范的基礎框架

1 全部使用命名空間

2 所有php文件必須自動載入,不能有include/require

3 單一入口

文件:

index.php

App 文件夾

imooc 文件夾


類名 文件名 命名空間 必須一致

注冊 自動載入 類;include 包含進來。

7 數據結構

spl 數據結構   4種常用的數據結構

$stack = new splstack(); 棧定義

$stack->push('data1');// 入棧

echo $stack->pop();//出棧 


隊列

$queue = new splQueue();

$queue->enqueue('data1');

$queue->enqueue('data2');

echo $queue->dequeue();


$heap = new splMinHeap();//最小堆

$heap->insert('data1');//插入

echo $heap->extract();//提取


固定尺寸數組

$array = new splFixedArray(10);

$array[0] = 123;

$array[1] = 234;

var_dump($array);


8 鏈式操作

$db->where()->limit()->order();

class Database{

function where(){}

function order(){}

function limit(){}

}

傳統:

$db->where();

$db->limit();

$db->order();


鏈式操作的核心就是:每個方法后,return $this;

class Database{

function where(){return $this;}

function order(){return $this;}

function limit(){return $this;}

}

9 魔術方法的使用

1 __get/__set 對象屬性接管

2 __call/__callStatic  方法/靜態方法 調用

3 __toString // 轉換字符串

4 __invoke // 當成函數執行


對于對象不存在的屬性的時候自動執行

class Object{

function __set($key,$value){

$this->array[$key] = $value;

}

function __get($key){

return $this->array($key);

}

}

對于對象不存在的方法的時候自動執行

class Object{

function __call($func,$param){

return 'magic function \n';

}

// 類的靜態方法

static function __callStatic($func,$param){

return 'magic static function \n';

}

// echo $obj; 把類當作字符串用

function __toString(){

return __CLASS__;

}

//echo $obj($param); 把類當函數用

function __invoke($param){

return 'invoke';

}

}


10 基礎設計模式

3種基本設計模式

工廠模式、單立模式、注冊模式

工廠方法或類生成對象,而不是在代碼中直接new

單例模式:使某個類的對象僅允許創建一個

注冊模式:全局共享和交換對象。


工廠模式:工廠方法替換new 操作

class Factory{

static function createDatebase(){

$db = new Database();

return $db;

}

}


$db = IMooc\Factory::createDatabase();

方便統一修改變化;


單列模式: 防止資源浪費,一次創建

  class Database

{

private $db;

private function __construct() //創建私有

{

}

static function getInstance()

{

if(self::$db){

return self::$db;

}else{

self::$db = new self();

return self::$db;

}

}

}



注冊模式:

class Register{


protected static $objects;

function set($alias,$object){

self::$objects[$alias] = $object;

}


function get($name){

return self::$objects[$name];

}

function _unset($alias){

unset(self::$objects[$alias]);

}

}


用法:$db = Register::get('db1');


適配器模式:

1 適配器模式,可以將截然不同的函數接口封裝成統一的API

2 實際應用舉例,php的數據庫操作有mysql,mysqli,pdo3種模式,可以統一成益智的接口


class mysql {}

class mysqli {}

class pdo{}


<?php


namespace IMooc;

interface IDatabase

{

function connet($host,$user,$passwd,$dbname);

function query($sql);

function close();

}

class Datebase{

}


mysql.php

<?php

namespace IMooc;

use IMooc\IDatabase;

class MySQL [implements] IDatabase{  [implements]  貌似需要替換

protected $conn;

function connect($host,$user,$passwd,$dbname){

$conn = mysql_connect($host,$user,$passwd);

mysql_select_db($dbname);

$this->conn = $conn;

}

function query($sql){

$res = mysql_query($sql);

return $res;

}

function close(){

}

}


// 使用

$db = new IMooc\Databes\MySQL();

$db->connect('127.0.0.1','root','passwd','dbname');

$db->query($sql);

1首先約定接口,

2實現接口的所有方法


策略模式

1 將一組特定的行為和算法封裝成類,以適應某些特定的上下文環境,這種模式就是策略模式

2 實際應用舉例,假如一個電商網站系統,針對男性女性顯示不同。

增加策略即可:


實現和使用

接口文件

UserStrategey.php

<?php

namespace IMooc;

interface UserStrategy{

function showAd();

function showCategory();

}


策略實現文件

femalUserStrategy.php

<?php

namespace IMooc;


class FemalUserStrategy implemets UserStragey{

function showAd(){

echo '男性廣告';

}

function showCategory(){

echo '男人';

}

}


// 女性同上

// 使用文件 index.php

<?php

class Page{

protected $strategy;

function index(){

if(isset($_GET['female'])){

// 男性邏輯

}


// 傳統如上


// 策略模式如下

echo "AD:";

$this->strategy->showAd();

}

function setStragegy(\IMooc\UserStrategy $strategy){

$this->strategy = $strategy;

}

}


$page = new Page;

if(isset($_GET['female'])){

$strategy = new \IMooc\FemalUserStrategy();

}else{

$strategy = new \IMooc\MaleUserStrategy();

}


$page->setStrategy($strategy);

$page->index();


策略模式的控制反轉、依賴導致

面向對象的解耦。很重要。



數據對象映射模式

1 數據對象映射模式,是將對象和數據存儲映射起來,對一個對象的操作會映射為對數據的操作





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀仁县| 青岛市| 本溪市| 资中县| 巴南区| 特克斯县| 广宗县| 木里| 怀来县| 元江| 称多县| 梁河县| 吉水县| 克东县| 青神县| 武夷山市| 尤溪县| 南江县| 抚松县| 封开县| 达孜县| 镶黄旗| 柳州市| 兴义市| 犍为县| 四川省| 广汉市| 拉萨市| 罗甸县| 铜鼓县| 兰考县| 绥宁县| 新兴县| 安塞县| 前郭尔| 资讯| 永济市| 兴宁市| 苍山县| 灵石县| 天气|