1 編程選擇等寬字體
黃石ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
2 source code pro 字體
3 運(yùn)行環(huán)境搭建,推薦 easyphp
4 關(guān)于命名空間:
面向?qū)ο蟮母呒?jí)特性
介紹、使用:
namespace test1;
下面的所有代碼都屬于這個(gè)命名空間里面的。
調(diào)用:test1\funciton_name(); 即可。
5 類自動(dòng)載入特性
function __autoload($class); // 以前是這么干的。
{
require __DIR__.'/'.$class.'.php';
}
// 后來(lái)被廢紙了, 5.3以后用 spl_autoload_register('autoload1');
這樣就不沖突了,防止不同框架之間的沖突。自己隨便定義自動(dòng)載入函數(shù)。
6 基礎(chǔ)框架:
psr-0規(guī)范
1 命名空間必須與絕對(duì)路徑一致
2 類名首字母大寫(xiě)
3 除了入口文件外的其它.php文件只有一個(gè)類,不能有可執(zhí)行代碼
開(kāi)發(fā)符合psr-0規(guī)范的基礎(chǔ)框架
1 全部使用命名空間
2 所有php文件必須自動(dòng)載入,不能有include/require
3 單一入口
文件:
index.php
App 文件夾
imooc 文件夾
類名 文件名 命名空間 必須一致
注冊(cè) 自動(dòng)載入 類;include 包含進(jìn)來(lái)。
7 數(shù)據(jù)結(jié)構(gòu)
spl 數(shù)據(jù)結(jié)構(gòu) 4種常用的數(shù)據(jù)結(jié)構(gòu)
棧
$stack = new splstack(); 棧定義
$stack->push('data1');// 入棧
echo $stack->pop();//出棧
隊(duì)列
$queue = new splQueue();
$queue->enqueue('data1');
$queue->enqueue('data2');
echo $queue->dequeue();
堆
$heap = new splMinHeap();//最小堆
$heap->insert('data1');//插入
echo $heap->extract();//提取
固定尺寸數(shù)組
$array = new splFixedArray(10);
$array[0] = 123;
$array[1] = 234;
var_dump($array);
8 鏈?zhǔn)讲僮?/p>
$db->where()->limit()->order();
class Database{
function where(){}
function order(){}
function limit(){}
}
傳統(tǒng):
$db->where();
$db->limit();
$db->order();
鏈?zhǔn)讲僮鞯暮诵木褪牵好總€(gè)方法后,return $this;
class Database{
function where(){return $this;}
function order(){return $this;}
function limit(){return $this;}
}
9 魔術(shù)方法的使用
1 __get/__set 對(duì)象屬性接管
2 __call/__callStatic 方法/靜態(tài)方法 調(diào)用
3 __toString// 轉(zhuǎn)換字符串
4 __invoke// 當(dāng)成函數(shù)執(zhí)行
對(duì)于對(duì)象不存在的屬性的時(shí)候自動(dòng)執(zhí)行
class Object{
function __set($key,$value){
$this->array[$key] = $value;
}
function __get($key){
return $this->array($key);
}
}
對(duì)于對(duì)象不存在的方法的時(shí)候自動(dòng)執(zhí)行
class Object{
function __call($func,$param){
return 'magic function \n';
}
// 類的靜態(tài)方法
static function __callStatic($func,$param){
return 'magic static function \n';
}
// echo $obj; 把類當(dāng)作字符串用
function __toString(){
return __CLASS__;
}
//echo $obj($param); 把類當(dāng)函數(shù)用
function __invoke($param){
return 'invoke';
}
}
10 基礎(chǔ)設(shè)計(jì)模式
3種基本設(shè)計(jì)模式
工廠模式、單立模式、注冊(cè)模式
工廠方法或類生成對(duì)象,而不是在代碼中直接new
單例模式:使某個(gè)類的對(duì)象僅允許創(chuàng)建一個(gè)
注冊(cè)模式:全局共享和交換對(duì)象。
工廠模式:工廠方法替換new 操作
class Factory{
static function createDatebase(){
$db = new Database();
return $db;
}
}
$db = IMooc\Factory::createDatabase();
方便統(tǒng)一修改變化;
單列模式: 防止資源浪費(fèi),一次創(chuàng)建
class Database
{
private $db;
private function __construct() //創(chuàng)建私有
{
}
static function getInstance()
{
if(self::$db){
return self::$db;
}else{
self::$db = new self();
return self::$db;
}
}
}
注冊(cè)模式:
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 適配器模式,可以將截然不同的函數(shù)接口封裝成統(tǒng)一的API
2 實(shí)際應(yīng)用舉例,php的數(shù)據(jù)庫(kù)操作有MySQL,mysqli,pdo3種模式,可以統(tǒng)一成益智的接口
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實(shí)現(xiàn)接口的所有方法
策略模式
1 將一組特定的行為和算法封裝成類,以適應(yīng)某些特定的上下文環(huán)境,這種模式就是策略模式
2 實(shí)際應(yīng)用舉例,假如一個(gè)電商網(wǎng)站系統(tǒng),針對(duì)男性女性顯示不同。
增加策略即可:
實(shí)現(xiàn)和使用
接口文件
UserStrategey.php
<?php
namespace IMooc;
interface UserStrategy{
function showAd();
function showCategory();
}
策略實(shí)現(xiàn)文件
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'])){
// 男性邏輯
}
// 傳統(tǒng)如上
// 策略模式如下
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();
策略模式的控制反轉(zhuǎn)、依賴導(dǎo)致
面向?qū)ο蟮慕怦?。很重要?/p>
數(shù)據(jù)對(duì)象映射模式
1 數(shù)據(jù)對(duì)象映射模式,是將對(duì)象和數(shù)據(jù)存儲(chǔ)映射起來(lái),對(duì)一個(gè)對(duì)象的操作會(huì)映射為對(duì)數(shù)據(jù)的操作
網(wǎng)頁(yè)標(biāo)題:php設(shè)計(jì)模式總結(jié)上
網(wǎng)頁(yè)URL:http://muchs.cn/article34/ighope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)