ホームページ > バックエンド開発 > PHPチュートリアル > PHP PSR仕様中国語版_PHPチュートリアル

PHP PSR仕様中国語版_PHPチュートリアル

WBOY
リリース: 2016-07-21 16:12:53
オリジナル
1153 人が閲覧しました

ドキュメント倉庫アドレス: https://github.com/hfcorriez/fig-standards

PSR仕様中国語版

  • PSR-0自動読み込み
  • PSR-1基本コード仕様
  • PSR-2コードスタイル
  • PSR-3 ログ インターフェイス
なぜ標準化されているのですか?

公式文の抜粋 この組織は、コード プロジェクトの共通点を議論することによって、協調的なプログラミング手法を見つけることを目的としています。

これで、「Google が厳格なコード標準を強制する理由」の記事の一節を思い出しました:

コードをコピーします コードは次のとおりです:

Google では、任意のコードを表示できます。 Google のすべてのコードベースであり、私はそれらを参照する許可を持っています。実際、このような権限を持っている人はほとんどいません。しかし、私が驚いたのは、インデント、名前付け、ファイル構造、コメント スタイルなど、非常に多くのコーディング標準により、驚くほど簡単にコードを読み、簡単に理解できるようになったことです。これには私はショックを受けました。なぜなら、これらの規範は取るに足らないものだと思っていたからです。彼らはそこまでのことはできなかったでしょうが、それでも彼らはそうしたのです。プログラムの基本的な構文構造を見るだけでコードの一部を理解できることがわかったとき、このような時間の節約は衝撃的です。


読者の皆様、規制についてはこれ以上言う必要はありません。

最後に書きました
仕様書は必須ではありません、もちろん自分で決めることもできますが、仕様書を使用すると連携が容易になります。現在、さまざまな最新のアプリケーションを作成することは、以前とは異なり、一般にアプリケーションは多くのモジュールで構成されており、仕様が実装されていないと、プロジェクト全体の理解とコミュニケーションがより複雑になるだけです。

仕様を使用する場合、プロジェクトとあなた自身にとってのメリットは当然明白です。

すべての承認された仕様への参照: https://github.com/hfcorriez/fig-standards/tree/zh_CN/%E6%8E%A5%E5%8F%97

コードスタイル仕様

このガイドその目的は、コードを参照する際の、異なる開発者間の認識の違いを減らすことです。 これは、PHP コードのフォーマット方法に関する一連の共通ルールを列挙します。
各メンバープロジェクトの共通点がこの記事のスタイルルールを形成します。異なる開発者が異なるプロジェクトで共同作業する場合、これらの異なるプロジェクト間で共通の標準が使用されます。 したがって、このガイドの利点はルール自体にあるのではなく、ルールを共有することにあります。
RFC 2119 の特徴的なキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「このドキュメントでは「OPTIONAL」を使用します。

1. 概要

コードはPSR-1に準拠する必要があります。

コードではタブではなく 4 つのスペースのインデントを使用する必要があります。
コード行の長さには厳密な制限はありません。ソフト制限は 120 文字でなければならず、80 文字以下でなければなりません。
名前空間宣言の下には空行が必要であり、use 宣言ブロックの下にも空行が必要です。
クラスの左中括弧は次の行に配置し、右中括弧はクラス本体の次の行に配置する必要があります。
メソッドの左中括弧は次の行に配置し、右中括弧はメソッド本体の下に配置する必要があります。
すべてのプロパティとメソッドには可視性 (翻訳者注: Public、Protect、Private) 宣言が必要です。抽象宣言と最終宣言は可視性の前になければなりません。
制御構造のキーワードの後に​​はスペースが必要です。メソッドと関数は使用できません。
コントロール構造体の左中括弧は同じ行に配置する必要があり、右中括弧はコントロール本体の次の行に配置する必要があります。
コントロール構造の左括弧の後にスペースを入れたり、右括弧の前にスペースを入れたりしてはいけません。

1.1. 例
この例には、上記のルールのいくつかの簡単な表示が含まれています。

コードをコピーします コードは次のとおりです:
namespace VendorPackage;
use FooInterface;
use BarClass as Bar;
use OtherVendorOtherPackageBazClass;
Class foo拡張バーfoointerface {

public function samplefunction($ a、$ b = null)

b){

final public static function bar()
{
// メソッド本体
}
}

2. まとめ
2.1 基本的なコード仕様
コードは PSR-1 のすべてのルールに準拠する必要があります。

2.2 ファイル
すべての PHP ファイルは、行終端文字として Unix LF (改行) を使用する必要があります。

すべての PHP ファイルは空行で終わる必要があります。

純粋な PHP コードのファイル終了タグ?>省略する必要があります

2.3. ライン
ラインの長さに厳密な制限を設けることはできません。

行の長さのソフト制限は 120 文字である必要があります。ソフト制限については、自動スタイル チェッカーは警告を出しますが、エラーは表示しません。

1 行の実際の長さは 80 文字を超えてはなりません。長い行は 80 文字以内の複数の行に分割する必要があります。

空白行以外の行の後にはスペースがあってはなりません。

空白行は読みやすさを向上させ、コードの関連ブロックを区別するために使用できます。

1 行に複数のステートメントを含めることはできません。

2.4. インデント
コードではインデントに 4 つのスペースを使用する必要があり、タブ文字はインデントとして使用できません。

注: タブと混合せずにスペースのみを使用すると、コードの違い、パッチ、履歴、コメントにおけるいくつかの問題を回避できます。ホワイトスペースを使用すると、微妙なインデントを調整して行間の位置を調整することも非常に簡単になります。

2.5. キーワードと True/False/Null
PHP キーワードは小文字である必要があります。

PHP 定数 true、false、null は小文字である必要があります。

3. 名前空間と Use の宣言
存在する場合は、名前空間宣言の後に空行が必要です。

use ステートメントが存在する場合は、すべての use ステートメントを名前空間ステートメントの下に配置する必要があります。

use キーワードは 1 つの宣言でのみ使用する必要があります。

use 宣言ブロックの後には空行が必要です。

例:

コードをコピーします コードは次のとおりです:

namespace VendorPackage;

FooClass を使用します;
BarClass を Bar として使用します;
OtherVendorOtherPackageBazClass を使用します;

// ... 追加の PHP コード ...

4. クラス、プロパティ、およびメソッド
「クラス」という用語は、すべてのクラス、インターフェイス、および特性を指します。

4.1. 拡張と継承
クラスの extends およびimplements キーワードはクラス名と同じ行になければなりません。

クラスの左中括弧はその下の独自の行に配置する必要があり、右中括弧はクラス本体の後の独自の行に配置する必要があります。

コードをコピーします コードは次のとおりです:

namespace VendorPackage;
use FooClass;
use BarClass as Bar;
use OtherVendorOtherPackageBazClass;

class ClassName extends ParentClassimplements ArrayAccess, Countable
{
// 定数、プロパティ、メソッド
}

リストを 1 つのインデントで複数の後続の行に分割できるように実装します。これを行う場合、リストの最初の項目は次の行に配置する必要があり、1 行にインターフェイスは 1 つだけ存在する必要があります。

コードをコピーします コードは次のとおりです:

namespace VendorPackage;

FooClass を使用します;
BarClass を Bar として使用します;
OtherVendorOtherPackageBazClass を使用します;

class ClassName extends ParentClassimplements
ArrayAccess,
Countable,
Serializable
{
// // 定数、プロパティ、メソッド
}

4.2. プロパティ
すべてのプロパティは可視性を宣言する必要があります。

var キーワードを使用して属性を宣言することはできません。

1 つのステートメントで複数の属性を宣言することはできません。

保護された可視性またはプライベートな可視性を示すために、プロパティ名の前に 1 つのアンダースコアを付けることはできません。

プロパティ宣言は次のようになります。

コードをコピーします コードは次のとおりです:

namespace VendorPackage;

class ClassName
{
public $foo = null;
}

4.3. メソッド
すべてのメソッドは可視性を宣言する必要があります。

メソッド名では、保護された可視性またはプライベートな可視性を示すために 1 つのアンダースコアのみを使用しないでください。

メソッド名の宣言の後にスペースを続けることはできません。開き中括弧はメソッド本体の下の独自の行に配置する必要があり、閉じ中括弧はメソッド本体の下の独自の行に配置する必要があります。左括弧の後にスペースを入れたり、右括弧の前にスペースを入れたりしてはいけません。

メソッド定義は次のようになります。 大括弧、コンマ、スペース、中括弧に注意してください:

コードをコピーします コードは次のとおりです:

namespace VendorPackage;

ClassclassName

{
public function foobarbaz($ arg1、&$ arg2、$ arg3 = [])

4.4. メソッドパラメータ
パラメータリストでは、カンマの前にスペースを入れてはならず、カンマの後にはスペースを 1 つ入れる必要があります。

メソッド内のデフォルト値を持つパラメータは、パラメータリストの最後に配置する必要があります。

コードをコピーします コードは次のとおりです:

namespace VendorPackage;

ClassclassName

{
public function foo($ arg1、&$ arg2、$ arg3 = [])

パラメータリストは、1 つのインデントで複数の後続の行に分割できます。これを行う場合、リストの最初の項目を次の行に配置し、各行にパラメータを 1 つだけ配置する必要があります。

パラメータリストが複数行に分かれている場合、右括弧と左中括弧はスペースを入れて配置し、それぞれの行を形成する必要があります。

コードをコピーします

コードは次のとおりです:

namespace VendorPackage; class ClassName{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []

}



4.5. abstract、final、static
存在する場合、abstract 宣言と Final 宣言は可視性宣言の前に配置する必要があります。

存在する場合、静的宣言の後に可視性宣言を続ける必要があります。


コードをコピーします


コードは次のとおりです:

namespace VendorPackage;
抽象クラス ClassName{ protected static $foo;
抽象保護関数 zim();

final public static function bar()
{

// メソッド本体

}
}

4.6. メソッドと関数の呼び出し

メソッドまたは関数を呼び出すには、メソッドまたは関数名と左括弧の間にスペース、左括弧の後にスペース、右括弧の前にスペースを入れてはいけません。関数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースが 1 つ必要です。

bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);

パラメータリストは、複数のインデントされた後続行に分割できます。これを行う場合、リストの最初の項目を次の行に配置し、各行に引数を 1 つだけ指定する必要があります。

コードを次のようにコピーします:

& lt ;? PHP
$ foo-& gt; bar (
$longargument,
$longargument,

); 5. コントロール構造 コントロール構造のスタイル規則は次のように要約されます: 制御構造キーワードの後に​​はスペースが必要です
左括弧の後にはスペースがあってはなりません
右括弧の前にはスペースがあってはなりません
右括弧と左中括弧の間にはスペースが必要です
の本体コードは 1 回インデントする必要があります
右中括弧は本体の次の行である必要があります
各構造体の本体は中括弧で囲む必要があります。この構造はより標準化されているように見え、新しい行を追加するときにエラーが発生する可能性が低くなります。

5.1. if、elseif、else
if 構造は以下のようになります。括弧、スペース、中括弧の配置に注意してください。else と elseif は前の本文の閉じ中括弧と同じ行にあります。


コードをコピー

コードは次のとおりです:


if ($expr1) {

// if body

} elseif ($expr2) {

// elseif body

} else {

// else body;

}

すべての制御キーワードを 1 つの単語のように保つには、else if の代わりにキーワード elseif を使用する必要があります。
5.2. スイッチ、ケース

スイッチ構造は以下のようになります。括弧、スペース、中括弧に注意してください。 case ステートメントはスイッチからインデントする必要があり、break キーワード (または他の Break キーワード) はケース本体と同じレベルでインデントする必要があります。空ではないケース本体が落ちた場合は、// no Break のようなコメントが必要です。



コードをコピーします

コードは次のとおりです:

switch ($expr) {
case 0:
echo '最初のケース、ブレイクあり';
Break;
case 1:
echo '2 番目のケース、フォールスルー';
// no Break
case 2:
case 3:
case 4:
echo '3 番目のケース、break の代わりに return';
return;
default:
echo 'デフォルトのケース';
Break;
}

5.3。 do while
while ステートメントは次のようになります。括弧、スペース、中括弧の配置に注意してください。
コードをコピーします コードは次のとおりです:

while ($expr) {
// 構造体
}

同様に、do while ステートメントは次のようになります。 。括弧、スペース、中括弧の配置に注意してください。
コードをコピーします コードは次のとおりです:

do {
do {
} // 構造体;
} while ($expr);


5.4. for
for ステートメントは次のようになります。括弧、スペース、中括弧の配置に注意してください。

コードをコピー
コードは次のとおりです:


for ($i = 0; $i <10; $i++) {
// for body
}

5.5.foreach


foreach ステートメントは以下のようになります。括弧、スペース、中括弧の配置に注意してください。

コードをコピー
コードは次のとおりです:


foreach ($iterable as $key => $value) {
// foreach body
}



5.6. catch
one try catch ステートメントは以下のようになります。括弧、スペース、中括弧の配置に注意してください。
コードをコピー
コードは次のとおりです:


try {
try // try body
} catch (FirstExceptionType $e) {
} catch (OtherExceptionType $e) {
/ / キャッチボディ
}

6. 締めくくり

クロージャを宣言するときは function キーワードの後に​​スペースが必要です。また、使用前にもスペースが必要です。

左中括弧は同じ行になければならず、右中括弧は本文の次の行になければなりません。

パラメータリストと変数リストの左括弧の後にスペースがあってはならず、パラメータリストと変数リストの右括弧の前にスペースがあってはなりません。

パラメータリストと変数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースがなければなりません。

デフォルト値を持つクロージャのパラメータはパラメータリストの後に配置する必要があります。

クロージャ宣言は次のようになります。括弧、スペース、中括弧の配置に注意してください。

コードをコピー コードは次のとおりです:

$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};

パラメータと変数のリストは、1 つのインデントで複数の後続の行に分割できます。これを行う場合は、リストの最初の項目を次の行に配置し、1 行にパラメータまたは変数を 1 つだけ配置する必要があります。

最終的なリスト (パラメーターまたは変数) が複数の行に分割されている場合は、右括弧と左中括弧をスペースと一緒に配置して独自の行を形成する必要があります。

以下は、複数行に分割されたパラメータと変数リストの例です。

コードをコピーします コードは次のとおりです:

$longArgs_noVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};

$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};

$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};

$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};

$shortArgs_longVars = function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};


クロージャが関数またはメソッドのパラメータとして呼び出される場合に注意してください, 上記と同じ書式ルールが適用されます。
次のようにコードをコピーします: & lt ;? PHP $ foo-& gt; bar (
$ arg1,
function ($ arg2) use ($ var1) {
// body
},
$arg3
);

7. 结论
在该指南中有很多风格的元素和做法有意被忽略掉。这些包括但不局限于:

全局变量和全局常量的声明

方法声明

操作符和赋值

行间对齐

注释和文档块

类名给你前缀和后缀

最佳实践

以后的建议可以修改和扩展该指南以满足这些或其他风格的元素和实践。

附录A 调查
为了写这个风格指南,我们采用了调查个项目以确定共同的做法。这个调查在这里供他人查看。

A.1. 调查数据
url,http://www.horde.org/apps/horde/docs/CODING_STANDARDS,http://pear.php.net/manual/en/standards.php,http://solarphp.com/manual/appendix-standards.style,http://framework.zend.com/manual/en/coding-standard.html,http://symfony.com/doc/2.0/contributing/code/standards.html,http://www.ppi.io/docs/coding-standards.html,https://github.com/ezsystems/ezp-next/wiki/codingstandards,http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html,https://github.com/UnionOfRAD/lithium/wiki/Spec%3A-Coding,http://drupal.org/coding-standards,http://code.google.com/p/sabredav/,http://area51.phpbb.com/docs/31x/coding-guidelines.html,https://docs.google.com/a/zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id=1fcqb93Sn-hR9c0mkN6m_tyWnmEvoswKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Respect/project-info/blob/master/coding-standards-sample.php,n/a,Object Calisthenics for PHP,http://doc.nette.org/en/coding-standard,http://flow3.typo3.org,https://github.com/propelorm/Propel2/wiki/Coding-Standards,http://developer.joomla.org/coding-standards.html
voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes
indent_type,4,4,4,4,4,tab,4,tab,tab,2,4,tab,4,4,4,4,4,4,tab,tab,4,tab
line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80,80,?,?,120,80,120,no,150
line_length_limit_hard,85,85,85,85,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no
class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,?,studly,studly,studly
class_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,next,next,next,next,next,next,same,next,next
constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper
true_false_null,lower,lower,lower,lower,lower,lower,lower,lower,lower,upper,lower,lower,lower,upper,lower,lower,lower,lower,lower,upper,lower,lower
method_names,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,lower_under,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel
method_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,same,next,next,next,next,next,same,next,next
control_brace_line,same,same,same,same,same,same,next,same,same,same,same,next,same,same,next,same,same,same,same,same,same,next
control_space_after,yes,yes,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes
always_use_control_braces,yes,yes,yes,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes
else_elseif_line,same,same,same,same,same,same,next,same,same,next,same,next,same,next,next,same,same,same,same,same,same,next
case_break_indent_from_switch,0/1,0/1,0/1,1/2,1/2,1/2,1/2,1/1,1/1,1/2,1/2,1/1,1/2,1/2,1/2,1/2,1/2,1/2,0/1,1/1,1/2,1/2
function_space_after,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no
closing_php_tag_required,no,no,no,no,no,no,no,no,yes,no,no,no,no,yes,no,no,no,no,no,yes,no,no
line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,?
control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no
blank_line_after_php,no,no,no,no,yes,no,no,no,no,yes,yes,no,no,yes,?,yes,yes,no,yes,no,yes,no
class_method_control_brace,next/next/same,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/next,same/same/same,same/same/same,same/same/same,same/same/same,next/next/next,next/next/same,next/same/same,next/next/next,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/same,next/next/next
A.2. 调查说明
indent_type: 缩进类型。 tab = "使用制表符",2 or 4 = "空格数量"

line_length_limit_soft: 行长度的“软”限制,用字符。 ? = 不表示或者数字 no 意为不限制.

line_length_limit_hard: 行长度的"硬"限制,用字符。 ? = 不表示或者数字, no 意为不限制.

class_names: 类名如何命名 lower = 只是小写, lower_under = 小写加下划线, studly = 骆驼型.

class_brace_line: クラスの左中括弧は同じ行に配置する必要がありますか、それとも次の行に配置する必要がありますか?

constant_names: クラス定数に名前を付けるにはどうすればよいですか? upper = 大文字と下線の区切り文字。

true_false_null: すべて文字で書きますか、それともすべて大文字で書きますか?

method_names: メソッドに名前を付けるにはどうすればよいですか? Camel = キャメルケース、 lower_under = 小文字と下線区切り文字。

method_brace_line: メソッドの左中括弧は同じ行にありますか、それとも次の行にありますか?

control_brace_line: 制御構造の左中括弧は同じ行にありますか、それとも次の行にありますか?

control_space_after: 制御構造キーワードの後に​​スペースはありますか?

always_use_control_braces: 制御構造には常に中括弧を使用しますか?

else_elseif_line: else と elseif を使用する場合、同じ行に配置する必要がありますか、それとも次の行に配置する必要がありますか?

case_break_indent_from_switch: switch ステートメントから case と Break が何回インデントされているか?

function_space_after: 関数名と関数呼び出しの左括弧にスペースはありますか?

クロージング_php_tag_required: 純粋な PHP ファイルの場合、タグを閉じますか?>必須ですか?

line_endings: どの行末を使用するか?

static_or_visibility_first: メソッドを定義するとき、静的と可視性のどちらが先に来ますか?

control_space_parens: 制御構造式で、左括弧の後と右括弧の前にスペースがありますか?はい = if ( $expr )、いいえ = if ($expr).

blank_line_after_php: PHP の開始タグの後に空行はありますか?

class_method_control_brace: クラス、メソッド、および制御構造内の左中括弧の位置。

a.3。 120: 4
150: 1
line_length_limit_hard:
?: 2
no: 11
85: 4
100: 3
120: 2
class_names:
?: 1
lower: 1
lower_under: 1
19
class_brace_line:
次:16
同じ:6
constant_names:
上:22
true_false_null:
下:19
上:3
method_names:
キャメル:21
下位:1
method_brace_line:
次:15
同:7
control_brace_line:
次: 4
同じ: 18
control_space_after:
いいえ: 2
はい: 20
always_use_control_braces:
いいえ: 3
はい: 19
else_elseif_line:
次: 6
同じ: 16
case_break_indent_from_switch:
0/ 1: 4
1/1: 4
1/2: 14
function_space_after:
no: 22
クロージング_php_tag_required:
no: 19
yes: 3
line_endings:
?: 5
LF: 17
static_or_visibility_first:
? : 5
いずれか: 7
static: 4
可視性: 6
control_space_parens:
?: 1
no: 19
Yes: 2
blank_line_after_php:
?: 1
no: 13
Yes: 8
class_method_control_brace:
next/next /次: 4
次/次/同じ: 11
次/同じ/同じ: 1
同じ/同じ/同じ: 6




http://www.bkjia.com/PHPjc/313547.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/313547.html

技術記事

文書倉庫アドレス: https://github.com/hfcorriez/fig-standards PSR 仕様 中国語版 PSR-0 が自動的にロード PSR-1 基本コード仕様 PSR-2 コード スタイル PSR-3 ログ インターフェイス 仕様の抜粋が翻訳されているのはなぜですか。 .

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート