溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-02-24 13:48:02 來(lái)源:網(wǎng)絡(luò) 閱讀:551 作者:SFLYQ 欄目:web開(kāi)發(fā)

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

前言

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

當(dāng)前已經(jīng)進(jìn)入PHP7的版本,做了很多的調(diào)整,尤其在性能上有很大的提升

面向?qū)ο?/h4>

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

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

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

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

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

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

使用composer psr4

  • 在項(xiàng)目中添加composer.json文件,根據(jù)自己需求配置
    {
    "autoload": {
    "psr-4": {
      "Library\\": "library/"
    }
    }
    }
  • 在composer.json文件所在目錄下輸入命令,就會(huì)自動(dòng) download vendor/composer autoload 相關(guān)文件
    composer install
  • php中的入口index include autoload.php
    include_once "vendor/autoload.php";
  • 注意,配置修改,內(nèi)容變更的時(shí)候需要執(zhí)行
    composer dump-autoload -o

弱類型問(wèn)題

編碼問(wèn)題:

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

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

根據(jù)場(chǎng)景使用,不能說(shuō)因?yàn)樽约毫?xí)慣使用強(qiáng)力型就把所有類型定義都寫(xiě)成強(qiáng)類型

/**
 * 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;
    }
}

通過(guò)定義變量類型得到代碼感知

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

因?yàn)镻HP是弱類型原因,在做類型比較的時(shí)候,往往會(huì)因?yàn)橐粋€(gè)不小心就掉坑里,下面列出類型函數(shù)和類型比較的表格

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

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

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

表達(dá)式 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看到這幾個(gè)表格的時(shí)候會(huì)有點(diǎn)兒暈,開(kāi)發(fā)的時(shí)候需要特別注意下類型比較,對(duì)等比較盡量用'===',一些函數(shù)類型已經(jīng)能夠確定不會(huì)傳遞多類型參數(shù),就可以強(qiáng)制類型進(jìn)行限制,后面熟練度上來(lái)再看這個(gè)表格就感覺(jué)也還好,常用的類型之間的比較已經(jīng)深深的進(jìn)入到腦海中

其他問(wèn)題:
  • IDE沒(méi)辦法給定義的變量進(jìn)行錯(cuò)誤提示,因?yàn)闆](méi)有定義類型IDE也不清楚定義變量的類型,沒(méi)辦法做錯(cuò)誤提醒,往往需要在運(yùn)行的時(shí)候輸出到頁(yè)面上才能發(fā)現(xiàn)問(wèn)題
  • PHP弱類型引發(fā)的漏洞實(shí)例

PHP靈活性

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

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

簡(jiǎn)單舉栗子:

<?php

class Developer
{
    public $name;
    public $hair;

    /**
     * 介紹
     */
    public function introduce()
    {
        $desc = '名字:' . $this->name . ',發(fā)量:' . $this->hair;
        if (!empty($this->age)) $desc = $desc . ',年齡:' . $this->age;
        echo $desc . "\r\n";
    }

    /**
     * 數(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;
        }
    }
}

// -----動(dòng)態(tài)添加對(duì)象屬性-----
$xm = new Developer();
$xm->name = '碼圣';
$xm->hair = 80;

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

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

// -----動(dòng)態(tài)調(diào)用對(duì)象函數(shù)-----

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

// -----動(dòng)態(tài)實(shí)例化-----

// 方式1 - 變量作為類名進(jìn)行實(shí)例化
$className = 'Developer';

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

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

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

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

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

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

$fn();

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

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

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

錯(cuò)誤級(jí)別

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

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

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

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

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

<?php echo @$var['sflyq'];

php的Error與Exception捕獲問(wèn)題:

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

  • register_shutdown_function 注冊(cè)一個(gè) callback ,它會(huì)在腳本執(zhí)行完成或者 exit() 后被調(diào)用。
  • set_error_handler 自己定義的方式來(lái)處理運(yùn)行中的錯(cuò)誤
  • set_exception_handler 設(shè)置默認(rèn)的異常處理程序,用于沒(méi)有用 try/catch 塊來(lái)捕獲的異常
連接池

涉及數(shù)據(jù)庫(kù)開(kāi)發(fā)過(guò)程中一般都會(huì)用到連接池,通過(guò)使用連接池減少每次需要重新建立連接的時(shí)間消耗提高數(shù)據(jù)操作效率,在高并發(fā)業(yè)務(wù)場(chǎng)景下效果尤為明顯,因?yàn)槟壳按蟛糠諴HP應(yīng)用服務(wù)都是使用fastcgi的進(jìn)程管理,每個(gè)請(qǐng)求服務(wù)器會(huì)分配進(jìn)程去處理,返回結(jié)果后進(jìn)程資源就會(huì)自動(dòng)回收,因?yàn)檫@個(gè)因素?zé)o法建立連接池

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

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


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

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

  • pthread擴(kuò)展
    • 適用于cli
    • 單獨(dú)配置php-cli.ini
  • swoole
    • 是一個(gè)底層網(wǎng)絡(luò)庫(kù)
  • gearman
    • 實(shí)現(xiàn)了一個(gè) Master-Worker 的模型
    • 分布式任務(wù)分發(fā)
    • 教程
  • workerman
    • php 實(shí)現(xiàn)的一個(gè)網(wǎng)絡(luò)庫(kù)
協(xié)程

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

因?yàn)樗怯脩魬B(tài)程序,所以相當(dāng)于多個(gè)協(xié)程會(huì)運(yùn)行在一個(gè)線程中。

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

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

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

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

服務(wù)部署:

  • php7+nginx+php-fpm
  • gitlab代碼托管,自動(dòng)發(fā)布環(huán)境
  • ELK日志服務(wù)
    • Elasticsearch 搜索引擎
    • Logstash/Filebeat 用戶日志處理
    • Kibana 用于對(duì)存儲(chǔ)在Elasticsearch里的結(jié)構(gòu)化數(shù)據(jù)做可視化展現(xiàn)
  • mysql
    • 根據(jù)業(yè)務(wù)分布式集群
  • redis
    • codis 分布式部署
  • mongodb
  • kafaka
    • 日志記錄,BI處理

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

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

  • 測(cè)試環(huán)境
    • test-app.sflyq.com
    • 測(cè)試數(shù)據(jù)庫(kù)
    • 公司內(nèi)網(wǎng)訪問(wèn)
    • gitlab release
  • 預(yù)發(fā)環(huán)境
    • yf-app.sflyq.com
    • 生產(chǎn)數(shù)據(jù)庫(kù)
    • 公司內(nèi)網(wǎng)訪問(wèn)
    • gitlab simulation
  • 生產(chǎn)環(huán)境
    • app.sflyq.com
    • gitlab master
  • 本地測(cè)試環(huán)境
    • 通過(guò)docker部署

最近階段感悟

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

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

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

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

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

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

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

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

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


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

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI