亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

WebGeeker-Validation: 一個(gè)強(qiáng)大的 PHP 參數(shù)驗(yàn)證器

zzzmh / 3026人閱讀

摘要:用于對接口的請求參數(shù)進(jìn)行合法性檢查。唯一不符合這一規(guī)則的是字符串型驗(yàn)證器,它們一部分以開頭的,但也有一部分不以開頭,比如等。驗(yàn)證型參數(shù)型驗(yàn)證器只有兩個(gè)合法的取值為字符串忽略大小寫。合法的取值為字符串忽略大小寫例完整的型驗(yàn)證器的列表參考附錄。

用于對API接口的請求參數(shù)進(jìn)行合法性檢查。

在實(shí)現(xiàn)服務(wù)端的API接口時(shí),對于每一個(gè)接口的每一個(gè)參數(shù),都應(yīng)該檢測其取值是否合法,以免錯(cuò)誤的數(shù)據(jù)輸入到系統(tǒng)中。這個(gè)工作可以說是費(fèi)時(shí)費(fèi)力,但又不得不做。而且PHP本身是弱類型語言,不但要驗(yàn)證取值,還要驗(yàn)證數(shù)據(jù)的類型是否符合,這就更復(fù)雜了。

本工具就是針對這個(gè)工作而設(shè)計(jì)的,能夠有效地減少編碼量,代碼可讀性好。

看看下面這段代碼,可以對用法有個(gè)大概印象,應(yīng)該不難看懂:

$params = $request->query(); // 獲取GET參數(shù)

// 驗(yàn)證(如果驗(yàn)證不通過,會拋出異常)
Validation::validate($params, [
    "offset" => "IntGe:0",
    "count" => "Required|IntGeLe:1,200",
]);

支持多種數(shù)據(jù)類型的校驗(yàn):整型、浮點(diǎn)型、bool型、字符串、數(shù)組、對象、文件、日期時(shí)間,能夠驗(yàn)證嵌套的數(shù)據(jù)結(jié)構(gòu)中的參數(shù),還支持帶條件判斷的驗(yàn)證。

目錄

1 簡介

1.1 為什么要寫這樣一個(gè)工具?

1.2 特點(diǎn)

1.3 一個(gè)簡單示例

2 安裝

3 快速上手

3.1 一個(gè)完整的示例(不使用任何框架)

3.2 驗(yàn)證不通過的錯(cuò)誤處理

3.3 在第三方框架中的用法

4 詳細(xì)使用方法

4.1 驗(yàn)證整型參數(shù)

4.2 驗(yàn)證浮點(diǎn)型參數(shù)

4.3 驗(yàn)證bool型參數(shù)

4.4 驗(yàn)證字符串型參數(shù)

4.5 驗(yàn)證數(shù)組型、對象型、文件型、日期時(shí)間型參數(shù)

4.6 驗(yàn)證器串聯(lián)(與)

4.7 Required 驗(yàn)證器

4.8 忽略所有 Required 驗(yàn)證器

4.9 嵌套參數(shù)的驗(yàn)證

4.10 條件判斷型驗(yàn)證器

4.11 驗(yàn)證規(guī)則并聯(lián)(或)

4.12 關(guān)于特殊值null, "",0,false的問題

4.13 關(guān)于基本數(shù)據(jù)類型與字符串的關(guān)系

4.14 自定義錯(cuò)誤信息輸出文本

4.15 國際化

4.16 國際化(0.4版之前)

A 附錄 - 驗(yàn)證器列表

A.1 整型

A.2 浮點(diǎn)型

A.3 bool型

A.4 字符串型

A.5 數(shù)組型

A.6 對象型

A.7 文件型

A.8 日期和時(shí)間型

A.9 條件判斷型

A.10 其它驗(yàn)證器

1 簡介 1.1 為什么要寫這樣一個(gè)工具?

我在使用Laravel框架的時(shí)候,Laravel提供了一個(gè)參數(shù)驗(yàn)證工具,不過用起來不怎么順暢:

每一個(gè)驗(yàn)證都寫一個(gè)驗(yàn)證類(繼承XXX),這樣太麻煩,而且系統(tǒng)中會多出許多許多的類;如果這些類在多處被復(fù)用,或者為了“更加”復(fù)用(減少重復(fù)代碼),再在這些類之間搞出很多的繼承關(guān)系,那么這些類的維護(hù)本身就是一個(gè)大問題;

驗(yàn)證器有“一詞多義”的問題。比如它有一個(gè)size驗(yàn)證器,它同時(shí)支持驗(yàn)證字符串、整型、文件等多種類型的參數(shù),針對不同數(shù)據(jù)類型size的含義不一樣。這就好比你去背英語單詞,有那么一些英語單詞,它有很多很多意思,不同的語境下有不同的含義。比如"present"這個(gè)單詞,它既有“呈現(xiàn)”、“出席”的意思,也有“禮物”的意思。這種一詞多義的單詞最讓人頭疼了,搞不清它到底什么意思,而且記不住啊。

為了解決這些問題,所以才寫了這么一個(gè)工具。

1.2 特點(diǎn)

每個(gè)功能特性都有單元測試(共有 41 tests, 369 assertions)

支持無限嵌套的數(shù)據(jù)結(jié)構(gòu)的驗(yàn)證(參考 1.3 節(jié)的例子)

支持條件驗(yàn)證,根據(jù)參數(shù)取值不同,應(yīng)用不同的驗(yàn)證規(guī)則(參考 1.3 節(jié)的例子)

支持正則表達(dá)式驗(yàn)證

簡潔,驗(yàn)證邏輯一目了然

輕量,不需要定義和維護(hù)各種驗(yàn)證classes

驗(yàn)證器語義明確,沒有“一詞多義”的問題

易學(xué)易記。比如整型驗(yàn)證器都是以"Int"開頭,浮點(diǎn)型驗(yàn)證器都是以"Float"開頭,等等。唯一不符合這一規(guī)則的是字符串型驗(yàn)證器,它們一部分以"Str"開頭的,但也有一部分不以"Str"開頭,比如Regexp, Ip, Email, Url等。

不綁定任何一個(gè)框架,無任何依賴。你可以在任何一個(gè)框架中使用這個(gè)工具,就算你不使用框架,也可以使用本工具。

1.3 一個(gè)簡單示例

下面這個(gè)示例展示了一個(gè)查詢獲取用戶投訴列表的Request參數(shù)的驗(yàn)證(注意其中的條件驗(yàn)證和針對嵌套數(shù)據(jù)結(jié)構(gòu)的驗(yàn)證):

//驗(yàn)證規(guī)則
$validations = [
    "offset" => "IntGe:0", // 參數(shù)offset應(yīng)該大于等于0
    "count" => "Required|IntGeLe:1,200", // 參數(shù)count是必需的且大于等于1小于等于200
    "type" => "IntIn:1,2", // 參數(shù)type可取值為: 1, 2
    "state" => [
        "IfIntEq:type,1|IntEq:0", // 如果type==1(批評建議),那么參數(shù)state只能是0
        "IfIntEq:type,2|IntIn:0,1,2", // 如果type==2(用戶投訴),那么參數(shù)state可取值為: 1, 2, 3
    ],
    "search.keyword" => "StrLenGeLe:1,100", // search.keyword 應(yīng)該是一個(gè)長度在[1, 100]之間的字符串
    "search.start_time" => "Date", // search.start_time 應(yīng)該是一個(gè)包含合法日期的字符串
    "search.end_time" => "Date", // search.end_time 應(yīng)該是一個(gè)包含合法日期的字符串
];

// 待驗(yàn)證參數(shù)
$params = [
    "offset" => 0, // 從第0條記錄開始
    "count" => 10, // 最多返回10條記錄
    "type" => 2, // 1-批評建議, 2-用戶投訴
    "state" => 0, // 0-待處理, 1-處理中, 2-已處理
    "search" => [ // 搜索條件
        "keyword" => "硬件故障", // 關(guān)鍵字
        "start_time" => "2018-01-01", // 起始日期
        "end_time" => "2018-01-31", // 結(jié)束日期
    ],
];

// 驗(yàn)證(如果驗(yàn)證不通過,會拋出異常)
Validation::validate($params, $validations);
2 安裝

通過Composer安裝

composer require webgeeker/validation:^0.4
3 快速上手 3.1 一個(gè)完整的示例(不使用任何框架)

這個(gè)例子直接驗(yàn)證$_POST(POST表單)中的參數(shù),展示了最基本的用法

 "IntGe:0", // 參數(shù)offset應(yīng)該大于等于0
        "count" => "Required|IntGeLe:1,200", // 參數(shù)count是必需的且大于等于1小于等于200
    ]);
} catch (Exception $e) {
    echo $e->getMessage();
}

注意:驗(yàn)證不通過會拋出異常,該異常中包含有錯(cuò)誤描述信息

3.2 驗(yàn)證不通過的錯(cuò)誤處理

如果驗(yàn)證不通過,Validation::validate(...)方法會拋出異常,建議在框架層面統(tǒng)一捕獲這些異常,提取錯(cuò)誤描述信息并返回給客戶端。

3.3 在第三方框架中的用法

第三方框架一般會提供Request對象,可以取到GET, POST參數(shù)(以Laravel為例)

//$params = $request->query(); // 獲取GET參數(shù)
$params = $request->request->all(); // 獲取POST參數(shù)

// 驗(yàn)證(如果驗(yàn)證不通過,會拋出異常)
Validation::validate($params, [
    // 此處省略驗(yàn)證規(guī)則
]);
4 詳細(xì)使用方法 4.1 驗(yàn)證整型參數(shù)

整型驗(yàn)證器全部以"Int"開頭,用于驗(yàn)證整型數(shù)值(如123)或整型字符串(如"123")。其它數(shù)據(jù)類型均不匹配。

"size" => "IntGeLe:1,100"

這條驗(yàn)證要求參數(shù)"size"是整數(shù),并且大于等于1,小于等于100。

完整的整型驗(yàn)證器的列表參考附錄 A.1 。

4.2 驗(yàn)證浮點(diǎn)型參數(shù)

浮點(diǎn)型驗(yàn)證器全部以"Float"開頭,用于驗(yàn)證浮點(diǎn)型數(shù)值(如1.0)、浮點(diǎn)型字符串(如"1.0")、整型數(shù)值(如123)或整型字符串(如"123")。其它數(shù)據(jù)類型均不匹配。

"height" => "FloatGeLe:0.0,100.0"

這條驗(yàn)證要求參數(shù)"height"是浮點(diǎn)數(shù),并且大于等于0,小于等于100.0。

完整的浮點(diǎn)型驗(yàn)證器的列表參考附錄 A.2 。

4.3 驗(yàn)證bool型參數(shù)

bool型驗(yàn)證器只有兩個(gè):

Bool: 合法的取值為: true, false, "true", "false"(字符串忽略大小寫)。

BoolSmart: 合法的取值為: true, false, "true", "false", 1, 0, "1", "0", "yes", "no", "y", "n"(字符串忽略大小寫)

"accept" => "BoolSmart"

完整的bool型驗(yàn)證器的列表參考附錄 A.3 。

4.4 驗(yàn)證字符串型參數(shù)

字符串型驗(yàn)證器不全以"Str"開頭。只接收字符串型數(shù)據(jù),其它數(shù)據(jù)類型均不匹配。

例1:

"name" => "StrLenGeLe:2,20"

這條驗(yàn)證要求參數(shù)"name"是字符串,長度在2-20之間(字符串長度是用mb_strlen()來計(jì)算的)。

例2:

"comment" => "ByteLenLe:1048576"

這條驗(yàn)證要求參數(shù)"comment"是字符串,字節(jié)長度不超過1048576(字節(jié)長度是用strlen()來計(jì)算的)。

例3:

"email" => "Email"

這條驗(yàn)證要求參數(shù)"email"是必須是合法的電子郵件地址。

例4(正則表達(dá)式驗(yàn)證):

"phone" => "Regexp:/^1(3[0-9]|4[579]|5[0-35-9]|7[0135678]|8[0-9]|66|9[89])d{8}$/"

這條驗(yàn)證要求參數(shù)"phone"是合法的手機(jī)號。

關(guān)于正則表達(dá)式中的哪些特殊字符需要轉(zhuǎn)義的問題,只需要用 preg_match() 函數(shù)驗(yàn)證好,如:

preg_match("/^string$/", $string);

然后把兩個(gè)"/"號及其中間的部分拷貝出來,放在Regexp:后面即可,不需要再做額外的轉(zhuǎn)義,即使正則中有"|"這種特殊符號,也不需要再轉(zhuǎn)義。

完整的字符串型驗(yàn)證器的列表參考附錄 A.4 。

4.5 驗(yàn)證數(shù)組型、對象型、文件型、日期時(shí)間型參數(shù)

參考附錄A.5-A.8

4.6 驗(yàn)證器串聯(lián)(與)

一條規(guī)則中可以有多個(gè)驗(yàn)證器前后串聯(lián),它們之間是“AND”的關(guān)系,如:

"file" => "FileMaxSize:10m|FileImage"

這個(gè)驗(yàn)證要求參數(shù)"file"是一個(gè)圖像文件,并且文件大小不超過10m

4.7 Required 驗(yàn)證器

Required驗(yàn)證器要求參數(shù)必須存在,且其值不能為null(這個(gè)是PHP的null值,而不是字符串"null")(參數(shù)值為null等價(jià)于參數(shù)不存在)。

如果多個(gè)驗(yàn)證器串聯(lián),Required驗(yàn)證器必須在其它驗(yàn)證器前面。

如果還有條件驗(yàn)證器,Required必須串聯(lián)在條件驗(yàn)證器后面。

如果驗(yàn)證規(guī)則中沒有 Required,當(dāng)參數(shù)存在時(shí)才進(jìn)行驗(yàn)證,驗(yàn)證不通過會拋異常;如果參數(shù)不存在,那么就不驗(yàn)證(相當(dāng)于驗(yàn)證通過)

例:

"size" => "Required|StrIn:small,middle,large"

該驗(yàn)證要求參數(shù)"size"必須是字符串的"small", "middle"或者"large"。

4.8 忽略所有 Required 驗(yàn)證器

比如當(dāng)創(chuàng)建一個(gè)用戶時(shí),要求姓名、性別、年齡全部都要提供;但是當(dāng)更新用戶信息時(shí),不需要提供全部信息,提供哪個(gè)信息就更新哪個(gè)信息。

$validations = [
    "name" => "Required|StrLenGeLe:2,20",
    "sex" => "Required|IntIn:0,1",
    "age" => "Required|IntGeLe:1,200",
];

$userInfo = [
    "name" => "tom",
    "sex" => "0",
    "age" => "10",
];
Validation::validate($userInfo, $validations); // 創(chuàng)建用戶時(shí)的驗(yàn)證

unset($userInfo["age"]); // 刪除age字段
Validation::validate($userInfo, $validations, true); // 更新用戶信息時(shí)的驗(yàn)證

注意上面代碼的最后一行:validate()函數(shù)的第三個(gè)參數(shù)為true表示忽略所有的 Required 驗(yàn)證器。

這樣我們就只需要寫一份驗(yàn)證規(guī)則,就可以同時(shí)用于創(chuàng)建用戶和更新用戶信息這兩個(gè)接口。

4.9 嵌套參數(shù)的驗(yàn)證

下面這個(gè)例子展示了包含數(shù)組和對象的嵌套的參數(shù)的驗(yàn)證:

$params = [
    "comments" => [
        [
            "title" => "title 1",
            "content" => "content 1",
        ],
        [
            "title" => "title 1",
            "content" => "content 1",
        ],
        [
            "title" => "title 1",
            "content" => "content 1",
        ],
    ]
];

$validations = [
    "comments[*].title" => "Required|StrLenGeLe:2,50",
    "comments[*].content" => "Required|StrLenGeLe:2,500",
];

Validation::validate($params, $validations);
4.10 條件判斷型驗(yàn)證器

條件判斷型驗(yàn)證器都以"If"開頭。

比如你想招聘一批模特,男的要求180以上,女的要求170以上,驗(yàn)證可以這樣寫:

$validations = [
    "sex" => "StrIn:male,female",
    "height" => [
        "IfStrEq:sex,male|IntGe:180",
        "IfStrEq:sex,female|IntGe:170",
    ],
];

參數(shù)"sex"的值不同,參數(shù)"height"的驗(yàn)證規(guī)則也不一樣。

完整的條件判斷型驗(yàn)證器的列表參考附錄 A.9 。

4.11 驗(yàn)證規(guī)則并聯(lián)(或)

多條驗(yàn)證規(guī)則可以并聯(lián),它們之間是“或”的關(guān)系,如

"type" => [
    "StrIn:small,middle,large",
    "IntIn:1,2,3",
]

上面這條驗(yàn)證要求參數(shù)"type"既可以是字符串"small", "middle"或"large",也可以整型的1, 2或3

驗(yàn)證規(guī)則并聯(lián)不是簡單的“或”的關(guān)系,具體驗(yàn)證流程如下:

按順序驗(yàn)證這些規(guī)則,如果有一條驗(yàn)證規(guī)則通過, 則該參數(shù)驗(yàn)證通過。

如果全部驗(yàn)證規(guī)則都被忽略(If驗(yàn)證器條件不滿足,或者沒有Required驗(yàn)證器并且該參數(shù)不存在,或者有0條驗(yàn)證規(guī)則),也算參數(shù)驗(yàn)證通過。

上面兩條都不滿足, 則該參數(shù)驗(yàn)證失敗。

這些規(guī)則如果要完全理清并不是一件容易的事,所以不建議使用驗(yàn)證規(guī)則并聯(lián),也盡量不要設(shè)計(jì)需要這種驗(yàn)證方式的參數(shù)。

4.12 關(guān)于特殊值null, "",0false的問題

這些特殊的值是不等價(jià)的,它們是不同的數(shù)據(jù)類型(需要用不同的驗(yàn)證器去驗(yàn)證):

""是字符串。

0是整型。

false是bool型。

null是PHP的空。在本工具中它有特殊的含義。

如果某個(gè)參數(shù)的值為null,則本工具會視為該參數(shù)不存在。

比如下面兩個(gè)array對于本工具來說是等價(jià)的.

$params = [
    "name" => "hello",
];

$params = [
    "name" => "hello",
    "comment" => null,
];

是等價(jià)的。

4.13 關(guān)于基本數(shù)據(jù)類型與字符串的關(guān)系

對于以下url地址

http://abc.com/index.php?p1=&&p2=hello&&p3=123

我們將得到的參數(shù)數(shù)組:

$params = [
    "p1" => "",
    "p2" => "hello",
    "p3" => "123",
];

注意

參數(shù)"p1"的值為空字符串"",而不是null。

參數(shù)"p3"的值為字符串"123",而不是整型123

GET方式的HTTP請求是傳遞不了null值的。

本工具的所有驗(yàn)證器都是強(qiáng)類型的,"Int"驗(yàn)證的是整型,"Float"驗(yàn)證的是浮點(diǎn)型,"Str*"驗(yàn)證的是字符串型,數(shù)據(jù)類型不匹配,驗(yàn)證是通不過的。但是字符串類型是個(gè)例外。

因?yàn)槌R?guī)的HTTP請求,所有的基本數(shù)據(jù)類型最終都會轉(zhuǎn)換成字符串,所以:

整型123和字符串"123"均可以通過驗(yàn)證器"Int"的驗(yàn)證;

浮點(diǎn)型123.0和字符串"123.0"均可以通過驗(yàn)證器"Float"的驗(yàn)證;

bool型true和字符串"true"均可以通過驗(yàn)證器"Bool"的驗(yàn)證;

但是null值和字符串"null"永遠(yuǎn)不等價(jià),字符串"null"就只是普通的字符串。

4.14 自定義錯(cuò)誤信息輸出文本

如果參數(shù)驗(yàn)證不通過,Validation::validate()方法會拋出異常,這個(gè)異常會包含驗(yàn)證不通過的錯(cuò)誤信息描述的文本。

但是這個(gè)描述文本對用戶來說可能不那么友好,我們可以通過兩個(gè)偽驗(yàn)證器來自定義這些文本:

Alias 用于自定義參數(shù)名稱(這個(gè)名稱會與內(nèi)部的錯(cuò)誤信息模版相結(jié)合,生成最終的錯(cuò)誤信息描述文本)

>>> 用于自定義錯(cuò)誤描述文本(這個(gè)文本會完全取代模版生成的錯(cuò)誤描述文本)。

看下面的例子:

$params = [
    "title" => "a",
];

Validation::validate($params, [
    "title" => "Required|StrLenGeLe:2,50",
]); // 拋出異常的錯(cuò)誤描述為:“title”長度必須在 2 - 50 之間

Validation::validate($params, [
    "title" => "Required|StrLenGeLe:2,50|Alias:標(biāo)題", // 自定義參數(shù)名稱
]); // 拋出異常的錯(cuò)誤描述為:“標(biāo)題”長度必須在 2 - 50 之間

Validation::validate($params, [
    "title" => "Required|StrLenGeLe:2,50|>>>:標(biāo)題長度應(yīng)在2~50之間", // 自定義錯(cuò)誤信息描述文本
]); // 拋出異常的錯(cuò)誤描述為:標(biāo)題長度應(yīng)在2~50之間

參考附錄A.10獲取更詳細(xì)的信息

4.15 國際化

從0.4版開始:

使用新的靜態(tài)成員變量 $langCode2ErrorTemplates 來進(jìn)行“錯(cuò)誤提示信息模版”的翻譯,主要目的是簡化格式(感謝 @gitHusband 的建議)。

舊的翻譯表 $langCodeToErrorTemplates 仍然有效,已有代碼無需修改(參考下一節(jié))。如果新舊翻譯表同時(shí)提供,優(yōu)先新的,新表中查不到再使用舊的。

要支持國際化,需要自定義一個(gè)類,繼承WebGeekerValidationValidation,重載兩個(gè)靜態(tài)成員變量:

$langCode2ErrorTemplates用于提供“錯(cuò)誤提示信息模版”的翻譯對照表。完整的錯(cuò)誤提示信息模版列表可以在WebGeekerValidationValidation::$errorTemplates成員變量中找到

$langCodeToTranslations用于提供“自定義參數(shù)名稱”(由Alias指定)和“自定義錯(cuò)誤描述文本”(由>>>指定)的翻譯對照表。

下面提供一個(gè)示例類:

class MyValidation extends Validation
{
    // “錯(cuò)誤提示信息模版”翻譯對照表
    protected static $langCodeToErrorTemplates = [
        "zh-tw" => [
            "Int" => "“{{param}}”必須是整數(shù)", //            
               
                                           
                       
                 

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

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

相關(guān)文章

  • PHP 開發(fā)者應(yīng)了解 24 個(gè)庫

    摘要:下面是一個(gè)例子這個(gè)庫要求你至少安裝了和其中的一個(gè),這可能意味著,在大多數(shù)主機(jī)提供商提供的主機(jī)上它可能用不了。借助它,你可以忘記如何書寫乏味的有一個(gè)姊妹庫叫,是一個(gè)基于的實(shí)現(xiàn)。 showImg(http://segmentfault.com/img/bVbJml); 作為一個(gè)PHP開發(fā)者,現(xiàn)在是一個(gè)令人激動的時(shí)刻。每天有許許多多有用的庫分發(fā)出來,在 Github 上很容易發(fā)現(xiàn)和使用這些庫...

    0x584a 評論0 收藏0
  • jQuery Validate 表單驗(yàn)證強(qiáng)大插件

    摘要:返回為真,表示需要驗(yàn)證。注意在文件中添加只能包括中文字英文字母數(shù)字和下劃線。中文名稱返回類型描述驗(yàn)證所選的。檢查是否驗(yàn)證通過。提交表單后,未通過驗(yàn)證的表單第一個(gè)或提交之前獲得焦點(diǎn)的未通過驗(yàn)證的表單會獲得焦點(diǎn)。 jQuery Validate 插件為表單提供了強(qiáng)大的驗(yàn)證功能,讓客戶端表單驗(yàn)證變得更簡單,同時(shí)提供了大量的定制選項(xiàng),滿足應(yīng)用程序各種需求。該插件捆綁了一套有用的驗(yàn)證方法,包括 ...

    zorpan 評論0 收藏0
  • 利用vmware搭建php開發(fā)環(huán)境

    摘要:打算探索方式,利用搭建開發(fā)環(huán)境利用搭建開發(fā)環(huán)境。第二種,基于文件共享服務(wù)安裝并配置軟件倉庫來安裝服務(wù)程序服務(wù)程序中的參數(shù)以及作用全局參數(shù)。是否所有人可見,等同于參數(shù)。 由于買不起MAC PRO,所以想研究下在windows下進(jìn)行php開發(fā)的最佳方式。打算探索方式, 利用vmware搭建php開發(fā)環(huán)境; 利用docker搭建php開發(fā)環(huán)境。 在網(wǎng)上看到vagrant問題頗多,所以不打...

    wuyangnju 評論0 收藏0
  • 你不可不知道20個(gè)優(yōu)秀PHP框架

    摘要:每一個(gè)開發(fā)者都知道,擁有一個(gè)強(qiáng)大的框架可以讓開發(fā)工作變得更加快捷安全和有效。官方網(wǎng)站是一款老牌的框架,現(xiàn)在穩(wěn)定版本已經(jīng)是了。官方網(wǎng)站是由最大的社區(qū)之一的管理開發(fā)的,也是一個(gè)開源的框架。 對于Web開發(fā)者來說,PHP是一款非常強(qiáng)大而又受歡迎的編程語言。世界上很多頂級的網(wǎng)站都是基于PHP開發(fā)的。 每一個(gè)開發(fā)者都知道,擁有一個(gè)強(qiáng)大的框架可以讓開發(fā)工作變得更加快捷、安全和有效。在開發(fā)項(xiàng)目之前選...

    zombieda 評論0 收藏0
  • Swoft 框架 1.0 正式來襲,首個(gè)基于 Swoole 原生協(xié)程 PHP 框架

    摘要:歷時(shí)年多緊鑼密鼓的開發(fā),以及愉快而忙碌的春節(jié)假期,期間數(shù)從到快破,碼云首頁推薦,作者和社區(qū)的大力支持,正式版終于要和大家見面。此次更新新增了大量特性在易用性代碼復(fù)用性能方面都有所提升??梢杂糜跇?gòu)建高性能的系統(tǒng)中間件基礎(chǔ)服務(wù)等等。 歷時(shí) 1 年多緊鑼密鼓的開發(fā),以及愉快而忙碌的春節(jié)假期,期間 github star 數(shù)從 500 到快破 1k,碼云首頁推薦,Swoole作者 Rango ...

    weij 評論0 收藏0

發(fā)表評論

0條評論

zzzmh

|高級講師

TA的文章

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