成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

大話轉(zhuǎn)崗 PHP 開發(fā)小結(jié)

Cristic / 1979人閱讀

摘要:錯誤是運行期間的嚴(yán)重問題,通常是因為代碼出錯而造成,必須要修正它,否則會使停止執(zhí)行。警告是非致命錯誤,程序執(zhí)行也不會因此而中止。

前言

近期因公司內(nèi)部轉(zhuǎn)崗,開始參與PHP項目進行后端開發(fā),一直都是強類型寫的比較多,弱類型語言也有接觸了一些,如:nodejs,python,做一些輔助服務(wù),數(shù)據(jù)采集的事情,剛好內(nèi)部有這個機會進行可以學(xué)以致用,加上之前對后端的理解和經(jīng)驗,很容易上手,這里記錄下開發(fā)過程遇到的些問題解決方案和自己對PHP的理解,以及項目中的部分架構(gòu)

當(dāng)前已經(jīng)進入PHP7的版本,做了很多的調(diào)整,尤其在性能上有很大的提升
面向?qū)ο?/b>

PHP框架內(nèi)置很多強大函數(shù),超級全局變量,魔術(shù)函數(shù),魔術(shù)變量,可以通過提供的內(nèi)置函數(shù)對PHP項目進行拓展,數(shù)據(jù)類型操作,http信息獲取等,通過安裝拓展添加各種功能支持,框架內(nèi)置函數(shù)調(diào)用大部分還是偏向面向過程,通過調(diào)用函數(shù),傳入要操作的類型數(shù)據(jù)和依賴數(shù)據(jù),這里剛開始有些不習(xí)慣,面向?qū)ο蟮拈_發(fā)中習(xí)慣直接 類型變量/對象 點出函數(shù)。

現(xiàn)在PHP開發(fā)可以選擇使用面向過程也可以用面向?qū)ο?,最早PHP版本不支持面向?qū)ο筇匦?,PHP5開始對OOP有良好的支持,很多PHP開發(fā)者沒有系統(tǒng)性的學(xué)習(xí)OOP相關(guān)知識,包括工齡長的PHP開發(fā)者或者老的項目很多還是偏向面向過程開發(fā),所以會接觸到很多偏向面向過程開發(fā)的項目

在項目開發(fā)過程中遇到些偏應(yīng)用業(yè)務(wù)開發(fā)的項目,看似有用到類,但是并沒用到面向?qū)ο蟮奶匦詫I(yè)務(wù)進行抽象,如:項目中每個業(yè)務(wù)功能有個php文件對應(yīng)一個類,類里里大部分都是邏輯function,然后通過拓展autoload,實現(xiàn)自動include php文件,比如通過L函數(shù)傳入要調(diào)用的類名,構(gòu)造出PHP文件路徑,進行include,然后返回類實例對象,只是通過類文件來區(qū)分功能函數(shù),并沒有使用到面向?qū)ο蟮奶匦赃M行封裝,還是偏向面向過程思路在開發(fā)

PHP5開始對OOP提供了良好支持,基本已經(jīng)和java,C# 面向?qū)ο笳Z法相似,可以使用命名空間,封裝interface,abstract,多態(tài):implements,extends,PHP7還支持多繼承trait,方便封裝些公用的功能,通過PSR4規(guī)范,引入composer 實現(xiàn)的autoload,可以很好的進行OOP開發(fā)

PHP開發(fā)還是比較靈活,可以面向過程也可以面向?qū)ο?,根?jù)具體的業(yè)務(wù)場景設(shè)計

使用composer psr4

在項目中添加composer.json文件,根據(jù)自己需求配置

{
  "autoload": {
    "psr-4": {
      "Library": "library/"
    }
  }
}

在composer.json文件所在目錄下輸入命令,就會自動 download vendor/composer autoload 相關(guān)文件

composer install

php中的入口index include autoload.php

include_once "vendor/autoload.php";

注意,配置修改,內(nèi)容變更的時候需要執(zhí)行

composer dump-autoload -o

弱類型問題
編碼問題:

在剛學(xué)習(xí)PHP語法的時候比較不習(xí)慣的就是弱類型,不用去定義變量類型,參數(shù)類型,返回值類型,對于習(xí)慣強類型的童鞋開始會有些不習(xí)慣,不定義類型心里怪怪的,總感覺哪里會導(dǎo)致些錯誤,而且弱類型在編碼的過程中IDE不會有類型錯誤的一些提示,只有在運行的時候報錯了才能知道這里錯誤了,錯誤提示滯后。尤其是從DB查詢數(shù)據(jù)返回的是一個stdclass/array,獲取到的數(shù)據(jù)沒有對應(yīng)一個實體類,無法知道具體數(shù)據(jù)有哪些字段,需要通過查詢的sql語句,然后通過查看表結(jié)構(gòu)才能知道數(shù)據(jù)字段信息,這點很難受,影響開發(fā)效率

PHP現(xiàn)在已經(jīng)支持typehint,通過定義類型可以對部分確定的類型變量,參數(shù),返回類型進行強類型的定義,尤其需要定義表數(shù)據(jù)Model類,這樣得到數(shù)據(jù)對象后通過->可以感知出所有數(shù)據(jù)字段,方便后續(xù)拓展開發(fā)和維護

根據(jù)場景使用,不能說因為自己習(xí)慣使用強力型就把所有類型定義都寫成強類型
/**
 * Class MJop
 * @property int $id 工作ID
 * @property string $name 工作名字
 * @property int $salary 薪水
 */
class MJop
{
}

/**
 * Class MWorker
 * @property string $name 員工名字
 * @property int $age 年齡
 * @property MJop $jop 工作
 */
class MWorker
{
}

class Worker
{
    /**
     * 獲取員工信息
     * @param int $id
     * @return MWorker|stdClass
     */
    public function get(int $id): stdClass
    {
        // mysql select
        return new stdClass();
    }
}

class Logic
{
    /**
     * 獲取員工描述
     * @param int $workId
     * @return string
     */
    public function Desc(int $workId): string
    {
        $worker = new Worker();
        $mWorker = $worker->get($workId);
        return "名字:" . $mWorker->name . ",年齡:" . $mWorker->age . ",工作:" + $mWorker->jop->name . ",薪水:" . $mWorker->jop->salary;
    }
}

通過定義變量類型得到代碼感知

/** @var Logic $logic */
$logic=new Logic();
弱類型比較一個頭兩個大:

因為PHP是弱類型原因,在做類型比較的時候,往往會因為一個不小心就掉坑里,下面列出類型函數(shù)和類型比較的表格

就問你,看到這些表格怕不怕,心中有一萬只草泥馬奔騰而過,瞬間變成幽怨的小眼神

使用 PHP 函數(shù)對變量 $x 進行比較

表達式 gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string TRUE FALSE TRUE FALSE
$x = null; NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = "1"; string FALSE FALSE TRUE TRUE
$x = "0"; string TRUE FALSE TRUE FALSE
$x = "-1"; string FALSE FALSE TRUE TRUE
$x = "php"; string FALSE FALSE TRUE TRUE
$x = "true"; string FALSE FALSE TRUE TRUE
$x = "false"; string FALSE FALSE TRUE TRUE

松散比較 ==

類型 TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
1 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
-1 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
"1" TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
array() FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
"php" TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE

嚴(yán)格比較 ===

類型 TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
1 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-1 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
"1" FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
array() FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
"php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

參考官方類型比較文檔

剛接觸PHP看到這幾個表格的時候會有點兒暈,開發(fā)的時候需要特別注意下類型比較,對等比較盡量用"===",一些函數(shù)類型已經(jīng)能夠確定不會傳遞多類型參數(shù),就可以強制類型進行限制,后面熟練度上來再看這個表格就感覺也還好,常用的類型之間的比較已經(jīng)深深的進入到腦海中

其他問題:

IDE沒辦法給定義的變量進行錯誤提示,因為沒有定義類型IDE也不清楚定義變量的類型,沒辦法做錯誤提醒,往往需要在運行的時候輸出到頁面上才能發(fā)現(xiàn)問題

PHP弱類型引發(fā)的漏洞實例


PHP靈活性

上面說了這么多弱類型下的問題,這里說下弱類型的優(yōu)點,弱類型一個明顯的優(yōu)勢就是靈活
PHP動態(tài)特性,可以動態(tài)實例化,動態(tài)添加屬性,動態(tài)調(diào)用函數(shù),等,通過這些特性可以用簡單的代碼封裝出強大的功能

簡單舉栗子:

name . ",發(fā)量:" . $this->hair;
        if (!empty($this->age)) $desc = $desc . ",年齡:" . $this->age;
        echo $desc . "
";
    }

    /**
     * 數(shù)據(jù)邏輯處理
     * @param $condition
     * @return bool|string
     */
    public function handle($condition)
    {
        if (is_int($condition)) {
            // ... ... 邏輯
            return "數(shù)字處理結(jié)果";
        } else if (is_string($condition)) {
            // ... ... 邏輯
            return "字符串處理結(jié)果";
        } else if (is_array($condition)) {
            // ... ... 邏輯
            return "數(shù)組處理結(jié)果";
        } else {
            return false;
        }
    }
}

// -----動態(tài)添加對象屬性-----
$xm = new Developer();
$xm->name = "碼圣";
$xm->hair = 80;

// 方式1 - 變量作為屬性名
// $fieldAge = "age";
// $developer->$fieldAge = 20;

// 方式2 - 直接設(shè)置屬性值
$xm->age = 20;


// -----動態(tài)調(diào)用對象函數(shù)-----

// 變量作為函數(shù)名調(diào)用
$fn = "introduce";
if (method_exists($xm, $fn)) $xm->$fn();


// -----動態(tài)實例化-----

// 方式1 - 變量作為類名進行實例化
$className = "Developer";

/** @var Developer $xf */
$xf = new $className();
$xf->name = "小方";
$xf->hair = 30;
$xf->introduce();


// ------屬性遍歷------
foreach ($xf as $key => $val) {
    echo $key . "=" . $val . "
";
}


// ------參數(shù)類型和返回值支持多類型------

$rs = $xf->handle(null);
if ($rs === false) {
    echo "處理失敗";
} else {
    echo $rs;
}

// ------函數(shù)變量------

$fn = function () {
    echo "do something";
};

$fn();

獨特特性
內(nèi)存不常駐

PHP WEB服務(wù)端開發(fā),服務(wù)器部署多依賴fastcgi進程管理器,static變量和C#包括java生命周期不一樣,C#/java 的WEB應(yīng)用服務(wù)進程靜態(tài)變量是常駐在內(nèi)存里并且共享,PHP大多使用nginx部署fastcgi進程管理,服務(wù)器接收請求的進程是彼此獨立的,請求響應(yīng)完了就回收資源,不存在常駐。

當(dāng)然PHP也是可以內(nèi)存常駐的,cli(命令行模式)下內(nèi)存是常駐,swoole框架開發(fā)部署的WEB應(yīng)用服務(wù)也是內(nèi)存常駐

錯誤級別

以往在C#開發(fā)的時候,執(zhí)行遇到錯誤會直接拋出異常,try catch 可以捕獲錯誤異常,出現(xiàn)異常不會繼續(xù)執(zhí)行后面的內(nèi)容,PHP會比較不一樣,根據(jù)不同的錯誤級別不一樣的執(zhí)行機制

PHP 有幾個錯誤嚴(yán)重性等級。三個最常見的的信息類型是錯誤(error)、通知(notice)和警告(warning)。它們有不同的嚴(yán)重性: E_ERROR、E_NOTICE和E_WARNING。錯誤是運行期間的嚴(yán)重問題,通常是因為代碼出錯而造成,必須要修正它,否則會使 PHP停止執(zhí)行。通知是建議性質(zhì)的信息,是因為程序代碼在執(zhí)行期有可能造成問題,但程序不會停止。 警告是非致命錯誤,程序執(zhí)行也不會因此而中止。

PHP 可以控制錯誤是否在屏幕上顯示(開發(fā)時比較有用)或隱藏記錄日志(適用于正式環(huán)境)
更改錯誤報告行為:

# 方式1:配置php.ini
error_reporting=E_ALL &  ~E_NOTICE
//方式2:函數(shù)調(diào)用設(shè)置報錯級別
error_reporting(E_ALL & ~E_NOTICE);

行內(nèi)錯誤抑制:
錯誤控制操作符 @ 來抑制特定的錯誤。將這個操作符放置在表達式之前,其后的任何錯誤都不會出現(xiàn)。


php的Error與Exception捕獲問題:

Error是檢測到的這個問題極有可能使程序無法繼續(xù)運行,而Exception則是雖然有問題但是程序繼續(xù)運行不受影響。在php7以前的版本中Error類型是不能被捕獲的,僅僅可以捕獲Exception類型。php7以后Error與Exception都繼承了Throwable接口,使得Error被捕獲成為可能,在php7以下的版本也可以捕獲Error

register_shutdown_function 注冊一個 callback ,它會在腳本執(zhí)行完成或者 exit() 后被調(diào)用。

set_error_handler 自己定義的方式來處理運行中的錯誤

set_exception_handler 設(shè)置默認(rèn)的異常處理程序,用于沒有用 try/catch 塊來捕獲的異常

連接池

涉及數(shù)據(jù)庫開發(fā)過程中一般都會用到連接池,通過使用連接池減少每次需要重新建立連接的時間消耗提高數(shù)據(jù)操作效率,在高并發(fā)業(yè)務(wù)場景下效果尤為明顯,因為目前大部分PHP應(yīng)用服務(wù)都是使用fastcgi的進程管理,每個請求服務(wù)器會分配進程去處理,返回結(jié)果后進程資源就會自動回收,因為這個因素?zé)o法建立連接池

方式1:
fastcgi模式下目前比較合理的方式就是通過單例模式,保證在當(dāng)前請求操作下的數(shù)據(jù)連接只創(chuàng)建一個對象

方式2:
可以通過swoole拓展實現(xiàn)數(shù)據(jù)連接池服務(wù),傳遞sql到服務(wù)里執(zhí)行返回數(shù)據(jù),swoole內(nèi)存常駐,應(yīng)用客戶端連接斷開連接池服務(wù)進程資源不會自動回收


多線程 協(xié)程
多線程

線程(thread) 是操作系統(tǒng)能夠進行運算調(diào)度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一個線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)

pthread擴展

適用于cli

多帶帶配置php-cli.ini

swoole

是一個底層網(wǎng)絡(luò)庫

gearman

實現(xiàn)了一個 Master-Worker 的模型

分布式任務(wù)分發(fā)

教程

workerman

php 實現(xiàn)的一個網(wǎng)絡(luò)庫

協(xié)程

線程是由操作系統(tǒng)內(nèi)核進行調(diào)度的,我們無法干預(yù),協(xié)程是用戶態(tài)程序,相當(dāng)于應(yīng)用程序自己進行了調(diào)度。

因為它是用戶態(tài)程序,所以相當(dāng)于多個協(xié)程會運行在一個線程中。

要注意的是,只有內(nèi)核對線程的調(diào)度才能夠利用cpu的多核資源,讓程序做到并行,所以在一個線程中的多個協(xié)程,是無法做到并行的。

用戶態(tài)和內(nèi)核態(tài):
簡單一句話,程序執(zhí)行時,如果執(zhí)行的是我們編寫的應(yīng)用程序的代碼,這些代碼就是運行在用戶態(tài)的;當(dāng)代碼中調(diào)用了系統(tǒng)調(diào)用后,接下來內(nèi)核中的代碼就會執(zhí)行,內(nèi)核中的代碼就是運行在內(nèi)核態(tài)的

swoole 4.0 全新的協(xié)程內(nèi)核


應(yīng)用服務(wù)器架構(gòu)

服務(wù)部署:

php7+nginx+php-fpm

gitlab代碼托管,自動發(fā)布環(huán)境

ELK日志服務(wù)

Elasticsearch 搜索引擎

Logstash/Filebeat 用戶日志處理

Kibana 用于對存儲在Elasticsearch里的結(jié)構(gòu)化數(shù)據(jù)做可視化展現(xiàn)

mysql

根據(jù)業(yè)務(wù)分布式集群

redis

codis 分布式部署

mongodb

kafaka

日志記錄,BI處理

代碼托管和測試環(huán)境:

均使用阿里云服務(wù)器,代碼托管自建gitlab服務(wù),從開發(fā)分支合并到gitlab環(huán)境分支自動部署到對應(yīng)環(huán)境服務(wù)器上

測試環(huán)境

test-app.sflyq.com

測試數(shù)據(jù)庫

公司內(nèi)網(wǎng)訪問

gitlab release

預(yù)發(fā)環(huán)境

yf-app.sflyq.com

生產(chǎn)數(shù)據(jù)庫

公司內(nèi)網(wǎng)訪問

gitlab simulation

生產(chǎn)環(huán)境

app.sflyq.com

gitlab master

本地測試環(huán)境

通過docker部署


最近階段感悟

從一個熟悉的語言到另一個相對陌生的語言,語言只是工具,在適合的場景下使用適合的工具,從自己熟悉的業(yè)務(wù)到陌生的業(yè)務(wù),離開自己的舒服區(qū),擁抱變化才能成長

在相同的后端領(lǐng)域切換語言學(xué)習(xí)成本還是比較低的,主要是對后端開發(fā)的思路,經(jīng)驗是可以共用的,只是換了個語言去實現(xiàn)

當(dāng)公司發(fā)展到一定的規(guī)模,崗位職能區(qū)分的很細(xì),做應(yīng)用開發(fā)的童鞋接觸不到服務(wù)器架構(gòu),沒有機會接觸職能以外的技術(shù),工作內(nèi)容除了完成業(yè)務(wù)需求開發(fā),還是業(yè)務(wù)需求開發(fā),這樣常年開發(fā)下去對個人成長的局限性很高,需要自己在工作之余進行拓展,對公司內(nèi)部有興趣的技術(shù)進行了解和學(xué)習(xí),耐心等待機會的到來

在結(jié)尾重點說下作為開發(fā)應(yīng)該有的工作態(tài)度,感覺大部分開發(fā)參與項目普遍責(zé)任感和帶入感不強,需求過來沒有多想,啪啪啪就是一梭子代碼,按照產(chǎn)品的邏輯流程碼了整個業(yè)務(wù)功能,功能測試上線可以正常運行沒有問題,然后功成身退,兩耳不聞天下事,作為開發(fā)在參與項目把自己擺在什么樣的位置決定這你是什么樣的工作態(tài)度

從項目角度出發(fā)應(yīng)該把自己所有參與的項目當(dāng)成自己的孩子,需要主動關(guān)注和關(guān)心項目的數(shù)據(jù)情況和后續(xù)發(fā)展,伴隨著孩子成長了,慢慢就有了成就感

從技術(shù)角度出發(fā)需要把項目需求功能開發(fā)當(dāng)成造房子,需要分析業(yè)務(wù)需求提供合理的設(shè)計方案,適當(dāng)?shù)某橄蠛褪褂迷O(shè)計模式,只有在開發(fā)的時候把地基打穩(wěn)了才能保證后續(xù)的維護和拓展,避免技術(shù)債

2019年開年第一篇,祝大家和自己新的一年里豬事順利,大吉大利!

歡迎Star 【大話WEB開發(fā)】

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30109.html

相關(guān)文章

  • 大話PHP設(shè)計模式之單例模式升級版

    摘要:用來指向已創(chuàng)建好的實例構(gòu)造函數(shù)為空注意這里是關(guān)鍵這是我們需要調(diào)用的方法把函數(shù)也定義為空,這樣就大功告成啦。 接上一篇大話PHP設(shè)計模式之單例模式 這一篇介紹一下升級版的單例模式,廢話不說先上代碼 不完美的單例模式 class singleMode { //用來指向已創(chuàng)建好的實例 public static $instance; //判斷是...

    darcrand 評論0 收藏0
  • 大話PHP設(shè)計模式之單例模式

    摘要:上面是簡單的單例模式,自己寫程序的話夠用了,如果想繼續(xù)延伸,請傳送至大話設(shè)計模式之單例模式升級版 看了那么多單例的介紹,都是上來就說怎么做,也沒見說為什么這么做的。那小的就來說說為什么會有單例這個模式以便更好的幫助初學(xué)者真正的理解這個設(shè)計模式,如果你是大神,也不妨看完指正一下O(∩_∩)O首先我不得不吐槽一下這個模式名字單例,初學(xué)者通過字面很難理解什么是單例,我覺得應(yīng)該叫唯一模式更貼切...

    VEIGHTZ 評論0 收藏0
  • 途牛原創(chuàng)|大話權(quán)限中心的PHP架構(gòu)之道

    摘要:權(quán)限中心的依賴聲明聲明依賴關(guān)系檢查代碼規(guī)范聲明開發(fā)依賴命名空間檢查代碼規(guī)范,執(zhí)行單元測試。單元測試持續(xù)交付一切都如此的完美,沒有測試,又如何可以證明這件事情的完美,又如何可以保障交付的質(zhì)量。 序 權(quán)限管理是無線運營系統(tǒng)中的核心模塊,通過訪問控制策略的配置,來約定人與資源的訪問關(guān)系。 本文著重講解如何通過PHP來構(gòu)建一個靈活、通用、安全的權(quán)限管理系統(tǒng)。 關(guān)于權(quán)限 首先我們來聊聊權(quán)限。 權(quán)...

    miracledan 評論0 收藏0
  • 那些年的體驗技術(shù)部

    摘要:隨著業(yè)務(wù)的爆發(fā),團隊人數(shù)迅速增長起來,團隊名也從前端開發(fā)部改名成體驗技術(shù)部,意在體現(xiàn)前端工程師的核心競爭力用技術(shù)解決產(chǎn)品體驗問題。前后端分離的研發(fā)模式在社區(qū)流行起來,體驗技術(shù)部最先實踐的是基于的應(yīng)用層方案。2008 年對中國人是復(fù)雜的一年,冰災(zāi),大地震,奧運會接踵而至。對玉伯來說也一樣,趕在奧運會排查臨時人口之前,玉伯從北京中科院軟件所離開,憑著自己幾年來在程序開發(fā)上的經(jīng)歷和對新興前端行業(yè)的...

    sean 評論0 收藏0
  • 轉(zhuǎn)崗測試工作三年經(jīng)驗總結(jié)(前端開發(fā)轉(zhuǎn)測試)

    摘要:時光飛逝,歲月如梭,我從前端開發(fā)崗位轉(zhuǎn)入測試崗位已經(jīng)三年了,這期間從迷茫到熟悉,到強化,到熟練,到總結(jié),感受還是很深的三年前的某一個晚上,我正準(zhǔn)備下班回家,我們的項目經(jīng)理把我叫到辦公司和我談話,談了很多,具體說什么不記得 ...

    nemo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<