ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

咔咔
リリース: 2021-01-18 09:06:57
オリジナル
2105 人が閲覧しました

1. Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータの使用を巧みに組み合わせています

上記のディレクトリでは、Kaka はケースとしてクエリを使用しています。デモでは、メンテナンスが困難になるため、この使用はフレームワークでは推奨されません。

このセクションのケースは、フレームワークで一般的に使用されるデータベース クエリ方法を使用してクエリされます。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

ユース ケース コード

上の図では、最も一般的に使用されるクエリ メソッドが使用されていることがわかります。この一連のケースについて詳細な分析を実施します。

Db クラスの __callStatic メソッドにも同じコードが記述されます。このメソッドは、宣言されていない静的メソッドを呼び出すときに実行されます。

このメソッドは __call メソッドとは異なります。__call メソッドは存在しないメソッドを呼び出します。この 2 つの違いに注意する必要があります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

宣言されていない静的メソッドを呼び出すと

上の図のメソッドの場合、static::connect() は最終的に object( think \db\Query)このオブジェクトは、内部処理の実行に関して、2番目のディレクトリの内容を参照できます。

したがって、実行プロセスは、thinkphp/library/think/db/Query.phpこのクラスの table メソッドになります。

パラメータは、tabletp_test に渡されるデータベース テーブル名です。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

現在のオペレーションのデータテーブルを指定してください

上図のコードによると、渡されたテーブル名が3回判定されます。

  • #1 回目は文字列かどうかの判定
  • 2 回目は存在するかどうかの判定)
  • 3回目の存在判定
  • # 渡された文字列によると、上記3つの判定が成立しないため、以下の処理が実行されます。

テーブル メソッドでは、最終的な実行プロセスが、渡されたテーブル名を属性

options

に格納することであることがわかります。

最後にプロセス
# を実行し、最終的に

think\db\Query Object オブジェクトを返します。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

#Return Query オブジェクト
where メソッド分析

テーブル メソッド分析後完了しました where メソッドもクラス

thinkphp/library/think/db/Query.php

内ですぐに実行されます。

AND クエリ条件の指定

上の図では、このクラスのメソッド func_get_args が示されています。このメソッドは、関数パラメータを含む配列を返します。リストです。

このメソッドは通常、call_user_func_array と一緒に使用されます。Kaka は以前、これら 2 つのメソッドを使用してケース実験を実施しました。

次に、関数 array_shift を使用して、配列内の最初の要素 (赤色) を削除し、削除された要素の値を返します。

下の図の最初の結果は func_get_args によって取得されたデータであり、2 番目の結果セットは array_shift によって返された結果です。

2 つの結果セットによって返される値を比較すると、array_shift の使用シナリオをよりよく理解できます。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

返された 2 つの結果の比較

次に、メソッド parseWhereExp# であるクエリ式が分析されます。 ##やる事。

このメソッドで注意する必要があるのは、渡される 2 つのパラメーターです。

パラメータ 1 はクエリ ロジックで、パラメータ 2 はケースを使用するときに渡されるパラメータです。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

クエリ式の分析

コードの最初の行では、知識ポイントinstanceofを学習する必要があります。

instanceofオブジェクトが特定のクラスのインスタンスであるかどうか、およびオブジェクトが特定のインターフェイスを実装しているかどうかを判断できます。

この使用例については、記事「ThinkPHP ソース コード分析コントローラー」で詳しく説明されています。

学習関数 instanceof によれば、最初の判定は実行されないことがよくわかります。

次の実行プロセスの研究を続け、Kaka で囲まれたボックスに従ってコードの簡単な分析を実行します。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

後半の勉強を続けます

上図によると、クエリロジックの記号がすべて小文字に変換されます

その後、判定を行います$fieldinstanceofWhere渡されたパラメータが Where クラスのインスタンスであるかどうか。

最後の判定は $フィールド インスタンスオブ式です。これは前のステップと同じ機能です。

つまり、コードの最終的な実行ロジックは、下の図で丸で囲まれた部分になります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

配列バッチ クエリの解析

この場合、where に渡されるパラメーターは配列であることに注意してください。

パラメータを where('t_id',1) に変更すると、is_string($field) のプロセスに従います。このプロセスは全員に任せます。クリックは解析されません。

ここでも、Kaka は解析用のパラメーターとして配列を使用しており、コードは引き続きこのクラスの parseArrayWhereItems メソッドを実行します

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

配列バッチ クエリ

このメソッドでは、まず key が何を返すかを知り、現在の内部ポインターの位置から要素キー名を返す必要があります。

したがって、コードは if ステートメントの判定を実行します。上記のすべての判定によると、一貫性がないため、このコードが実行されます。$where[] = [$key, is_array ($val) ? 'IN ' : '=', $val];

このコードは、ループ配列の値が配列であるかどうかを判断します。配列の場合は in で、そうでない場合は = です。値が 1 であるため、配列の 2 番目の値は = です。

そして、where の最終値は、下の図に出力されるデータです。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

#where の途中で返される値
where は空ではないため、コード実行処理は where まで実行されます。以下の図の位置を指定し、最後にこのクラスのインスタンスを返します。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

# オプション属性にクエリ パラメータを格納する
#find() 実行プロセス

#その後もコードはこのクラスの find メソッドを実行して単一のレコードを検索します。

find ではパラメーターが渡されないため、コードは $this->parseOptions();分析式 (クエリまたは書き込み操作に使用できます)

まで実行されます。今回のケースに関する限り、この一見長いコードはよく見ると理解できますが、最終的には現在のパラメータをすべて返します。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

#単一レコードの検索
返される結果は次のとおりです

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

##すべてのパラメータの結果を返す
実際のクエリ データはこのコードです
$result = $this->connection->find($this);

、 thisコードはファイル thinkphp/library/think/db/Connection.php に対して実行されます。<p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>このコードから、データをクエリするときにフレームワークがデフォルトで 1 という制限を追加することがわかります。なぜこのように追加されるのかについては、SQL 最適化の知識を確認する必要があります。 </p> <p><img src="https://img.php.cn/upload/image/255/922/331/1610338347974019.png" title="1610338347974019.png" alt="ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。"></p> <figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">単一レコードの検索</figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>これは SQL ステートメントの生成に関するもので、コードを見れば理解できると思います。カカ 分析されるのは、実行プロセスと特定のコードを簡単に理解するだけです。 </p> <p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>具体的な実装プロセスについては、機会があれば後の段階でKakaが各メソッドを個別に詳細に分析する予定ですが、その際は主にコードの分析に焦点を当てます。 。 </p> <p><img src="https://img.php.cn/upload/image/113/278/453/1610338342601897.png" title="1610338342601897.png" alt="ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。"></p> <figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">特定のルールに従って SQL ステートメントを生成し、クエリを実行します。</figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>最終的な戻り結果は次のとおりです。</p> <p> <img src="https://img.php.cn/upload/image/242/358/887/1610338336270934.png" title="1610338336270934.png" alt="ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。"></p> <figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">結果を返す</figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>上記は、コネクタ、クエリー、ジェネレーターと組み合わせて Db によって実装されたデータベース クエリ関数についてです。 </p> <p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>Db シナリオの分析はここまでで、次に Kaka が Model の簡単な分析を行います。 </p> <h1 style="box-sizing: border-box; margin-top: 30px; margin-bottom: 15px; color: black; padding: 0px; font-size: 1.3em; border-top: 2px solid rgb(248, 57, 41); text-align: center; font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb> <span class="content" style="box-sizing: border-box; display: inline-block; font-weight: normal; background: rgb(248, 57, 41); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-radius: 0px 0px 13px 13px;">2. getLastSql の実装プロセスについて</span><span class="suffix" style="box-sizing: border-box;"></span> </h1> <p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>まだ前のケースですが、このメソッドを使用して結果を出力して確認してみましょうは。 </p> <p><img src="https://img.php.cn/upload/image/252/151/721/1610338330790271.png" title="1610338330790271.png" alt="ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。"></p> <figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">印刷ケース</figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>上の図を見ると、それがフレームワークによって最終的に生成された SQL ステートメントであることがわかります。をクリックし、この SQL ステートメントがどのように生成されるかを説明します。 </p> <p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>下の図は、このデモンストレーションのケースを示しています。下の図の丸で囲まれた領域です。 </p> <p><img src="https://img.php.cn/upload/image/583/904/602/1610338324864603.png" title="1610338324864603.png" alt="ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。"></p> <figure style="box-sizing: border-box; margin: 10px 0px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif font-size: letter-spacing: white-space: normal word-spacing: background-color: rgb><figcaption style="box-sizing: border-box; margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">デモケース</figcaption></figure><p style="box-sizing: border-box; margin-top: 0.8em; margin-bottom: 0.8em; font-size: 16px; padding-top: 8px; padding-bottom: 8px; line-height: 1.75; color: rgb(53, 53, 53); font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, " pingfang sc cambria cochin georgia times new roman serif letter-spacing: white-space: normal word-spacing: background-color: rgb>上の図で丸で囲まれた領域からコードをトレースすると、ファイル <code style="box-sizing: border-box; font-size: 14px; font-family: " operator mono consolas monaco menlo monospace overflow-wrap: break-word padding: border-radius: margin: color: rgb background-color: rgba word-break: break-all>thinkphp/library/think/ にたどり着きます。 Db.php を実行し、このクラスの __callStatic メソッドを実行します。このメソッドについては説明しません。これまでに何度も言及しています。

そして、戻り結果を宣言する必要はありません。上で述べたように、最終的な戻り結果が return object(think\db\Query)

であることだけを知っておく必要があります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

宣言されていない静的メソッドが呼び出されると、そのメソッドが実行されます。

##上図の戻り結果から、次のことがわかります。最終的には object(think\db\Query)このクラスの getLastSqlこのメソッド

を呼び出します。

この方法により、最新のクエリのSQL文が取得されたことが分かります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

最新のクエリの SQL ステートメントを取得します

ここには、属性 connection# に関するいくつかの質問があります。 ## それは正確には何ですか? 以下に簡単な分析を示します。

この種の属性の宣言は、このクラスのコンストラクタか親クラスのコンストラクタ内で宣言するのが一般的ですが、これもソースコードを読むときのちょっとしたヒントになります。

したがって、最初にこのクラスのコンストラクターを確認する必要があります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

アーキテクチャ関数

上の図からわかるように、ここでは依存性注入が使用されているため、Connection はオブジェクトであり、またそのオブジェクトでもあります。 - コネクタと呼ばれます。

したがって、この Connection オブジェクトは以下のように出力されます。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

#コネクタ オブジェクトの出力結果
上の図によると、使用するクラス ファイルは次のようにする必要があることがわかります。 \db \connector\Mysql

次に、このクラスの getLastSql メソッドが実行されます。 しかし、このクラスを実行してみると、このクラスにはそのようなメソッドがまったく存在しないことがわかります。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

継承関係

上図の継承関係によると、このメソッドは thinkphp/library/ にあることがわかります。 think/db /Connection.phpこのクラス ファイル内。

下の図はこのメソッドの実行プロセスを示しており、パラメーターが 2 つあることがわかりますが、この 2 つのパラメーターが何なのかまだわかりません。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

最新のクエリの SQL ステートメントを取得する

コード追跡に従って、まず、表示される 2 つのパラメーターを簡単に分析します。上の図の

の指示
  • $this->queryStr現在の SQL コマンド
  • $this->bind バインディング パラメータ

$this->queryStr の属性値を追跡する

ここに来ると、おそらく少し混乱するでしょう。この値がちょっと不安で、印刷しても結果が得られません。

もちろん、ブレークポイント デバッグをデバッグする別の方法もあります。

しかし、カカはソースコードをみんなに見せているので!上記の 2 つの方法は使用せず、ソース コードから直接手がかりを見つけます。

Kaka が提供したケースによると、実行の最後のステップは find メソッドです。このメソッドはクラス thinkphp/library/think/db/Connection.php にもあり、検索します単一のレコード。

それでは、この方法で少し検索してみますが、皆さんのここに丸が付いているカカ、下の写真のカカで囲った場所です。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

クエリを実行します

上の図で Kaka が提供したコード コメントによると、最初のパラメータは生成された SQL です。ステートメントを続けて、このメソッドを確認してください。この時点では、このメソッドは引き続きファイル thinkphp/library/think/db/Connection.phpquery メソッドを実装します。このクラスの。

このメソッドでは、queryStr 属性の設定がこの属性に直接割り当てられていることが一目でわかります。つまり、この属性の値は、前の SQL ステートメント。

ThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。

クエリを実行してデータ セットを返す

したがって、この getLastSql は、このステートメントの前に実行された SQL ステートメントを取得し、最後に実行された SQL ステートメントのみを取得できます。 SQL ステートメント。

以上はgetLastSqlの実装原理ですが、ここで注意が必要なのはSQLの生成であり、少し複雑です。

まとめ

ここまでで、データベース内の Db クラスの動作シナリオとその組み合わせの分析が完了しました。コネクタ、クエリー、ジェネレーターの説明はここで終わります。

ここで、Kaka は主に 2 つのケースを実行に使用します。1 つ目はネイティブ ケース、2 つ目はフレーム カプセル化ケースです。

これら 2 つのケースは、ソース コードの詳細な分析を行うために使用されましたが、ドキュメントには多くの実装方法が記載されています。他の方法については、Kaka が提供するヒントに従って分析するだけで済みます。少しずつ。

すべてのメソッドを実行する必要はなく、どのメソッドを使用しても上記で解析したメソッドであり、これも非常に簡単です。

最後に、getLastSql を使用して最後に実行された SQL ステートメント クエリを取得する方法を示しました。ここでの実装原則は、主に Db クラスでデータベースを操作するときに find メソッドまたは select メソッドを使用することです。メソッドは最終的に 1 つのメソッド、つまりクエリ メソッドにつながります。

このメソッドには属性値 queryStr もあります。つまり、この時点で SQL ステートメントが割り当てられ、getLastSql メソッドが使用されます queryStr 属性と binding 属性は SQL を結合し、最終的に SQL ステートメントを返します。

学習の継続、ブログの継続、共有の継続は、Kaka が設立以来常に堅持してきた信念です。巨大なインターネット上の Kaka の記事が少しでもお役に立てれば幸いです。カカです、また会いましょう。

以上がThinkPHP の Db クラス ライブラリは、コネクタ、クエリ、SQL ジェネレータと組み合わせて使用​​されます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!