ホームページ > バックエンド開発 > PHPチュートリアル > 開発に不可欠な 8 つの PHP 関数

開発に不可欠な 8 つの PHP 関数

WBOY
リリース: 2016-06-13 12:11:05
オリジナル
873 人が閲覧しました

開発に必要な 8 つの PHP 関数

PHP 開発を行ったプログラマーは、PHP に多くの組み込み関数があることを知っておく必要があります。これらをマスターすると、PHP 開発がより快適になります。この記事では、PHP の 8 つの必須関数を紹介します。開発のための関数はどれも非常に実用的であり、すべての PHP 開発者がこれらを習得できることを願っています。

1. 任意の数の関数パラメータを渡します

.NET または JAVA プログラミングでは、関数パラメータの数は通常固定されていますが、PHP では、任意の数のパラメータを使用します。次の例は、PHP 関数のデフォルトのパラメーターを示しています。

1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 两个默认参数的函数
function foo($arg1 = ”, $arg2 = ”) {
 
echo “arg1: $arg1n”;
echo “arg2: $arg2n”;
 
}
 
foo(‘hello’,'world’);
 /* 输出:
arg1: hello
 arg2: world
 */
 
foo();
 /* 输出:
arg1:
 arg2:
 */
23456
7
89 10
111213141516
17
1819
// 2 つのデフォルトパラメータを持つ関数
function foo($arg1 class="php plain">= ”, $arg2 = ”) { echo<codeclass plain>"arg1 : <code class="php variable">$arg1n";
echo "arg2: $arg2n";
}<div class="linenumber8index7alt1"><divclass><codeclass plain>foo('hello','world') ; <div class="linenumber10index9alt1"> <code class="php space"> /* 出力:
arg1: hello<div class="linenumber12index11alt1"> <code class="php space "> arg2: world
*/
foo();<div class="linenumber16index15alt1"> <code class="php space"> /* 出力: / code><div class="linenumber17index16alt2"><codeclass comments>arg1:<div class="linenumber18index17alt1"><codeclass php> <code class="php comments">arg2:
*/

次の例は、?func_get_args() メソッドを使用する PHP での変数パラメーターの使用例です。

1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 是的,形参列表为空
function foo() {
 
// 取得所有的传入参数的数组
$args = func_get_args();
 
foreach ($args as $k => $v) {
 echo “arg”.($k 1).”: $vn”;
 }
 
}
 
foo();
 /* 什么也不会输出 */
 
foo(‘hello’);
 /* 输出
arg1: hello
 */
 
foo(‘hello’, ‘world’, ‘again’);
 /* 输出
arg1: hello
 arg2: world
 arg3: again
 */
2345
6
7
8
9
10
11
12131415
16
17
18
19
202122232425
26
/ / はい、パラメータリストは空です
関数 foo() {
// すべて取得<div class="linenumber5index4alt2"> <code class="php variable">$args = func_get_args( で渡されるパラメータの配列);
foreach<code class="php plain">($args as $k => $v) { code><div class="linenumber8 index7 alt1"> <code class="php space"> echo "arg".($k 1).": $vn";
code><code class="php plain">}
}<div class="linenumber12index11alt1"><divclass><codeclass plain>foo();<div class="linenumber14index13alt1"> <code class="php space"> /* 何も出力されません*/ code ><div class="linenumber15index14alt2"><divclass><code class="php plain">foo('hello');
/* 出力
arg1: hello<div class="linenumber19index18 alt2"> <code class="php space"> */
foo('hello', 'world', 'again');<div class="linenumber22index21alt1"> <code class="php space"> /* 出力
arg1: hello
arg2: 世界
arg3: 再び
*/

2. glob() を使用してファイルを検索します

ほとんどの PHP 関数の関数名は文字通りその目的を理解できますが、 ?glob() を見ると分からないかもしれません。実際、glob() は、scandir() と同様に、ファイルの検索に使用できます。

// サフィックス PHP を持つすべてのファイルを取得します
$ files = glob('*.php'); ><div class="linenumber3index2alt2"><divclass><code class="php plain">print_r( $files);
/* 出力:
配列
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/
1
1
2
3
4
5
6
7
8
9
10
11
12
13
// 取得所有的后缀为PHP的文件
$files = glob(‘*.php’);
 
print_r($files);
 /* 输出:
Array
 (
 [0] => phptest.php
 [1] => pi.php
 [2] => post_output.php
 [3] => test.php
 )
 */
2
345
6
7
8
9
101112
13

你还可查找多种后缀名

1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 取PHP文件和TXT文件
$files = glob(‘*.{php,txt}’, GLOB_BRACE);
 
print_r($files);
 /* 输出:
Array
 (
 [0] => phptest.php
 [1] => pi.php
 [2] => post_output.php
 [3] => test.php
 [4] => log.txt
 [5] => test.txt
 )
 */
23
4

5

6

7
8
1
2
3
4
5
6
7
8
9
10
$files = glob(‘../images/a*.jpg’);
 
print_r($files);
 /* 输出:
Array
 (
 [0] => ../images/apple.jpg
 [1] => ../images/art.jpg
 )
 */
9
10
111213
1415
//PHP 文件と TXT 文件を取得<div class="linenumber2index1 alt1">$files <code class="php plain">= glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* 出力:
配列
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/
上路径:
123456
78
9
10
$files = glob('../images/a*.jpg');
print_r($files);
/* 出力:
配列
(
[0] => ../images/apple.jpg
[1 ] => ../images/art.jpg
)<div class="linenumber10index9 alt1"> <code class="php space">*/

如果你想到绝对路径,你可调用?realpath() 関数数:

1
1
2
3
4
5
6
7
8
9
10
11
12
13
$files = glob(‘../images/a*.jpg’);
 
// applies the function to each array element
 $files = array_map(‘realpath’,$files);
 
print_r($files);
 /* output looks like:
 Array
 (
 [0] => C:wampwwwimagesapple.jpg
 [1] => C:wampwwwimagesart.jpg
 )
 */
23
4
5
6
789
10111213
$files = glob('../images/ a*.jpg');
//関数を各配列要素に適用します
$files <code class="php plain">= array_map('realpath',$files) ;
print_r($files);
/* 出力は次のようになります:
配列
(
[0] => C:wampwwwimagesapple.jpg
[1] =&gt ; C:wampwwwimagesart.jpg
)
*/ td>

3. メモリ使用量情報の取得

PHP のメモリ リサイクル メカニズムはすでに非常に強力です。PHP スクリプトを使用して、memory_get_usage() 関数を呼び出して現在のメモリ使用量を取得することもできます。現在のメモリ使用量については、memory_get_peak_usage() 関数を呼び出して、ピークのメモリ使用量を取得します。参照コードは次のとおりです:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
echo “Initial: “.memory_get_usage().” bytes n”;
 /* 输出
Initial: 361400 bytes
 */
// 使用内存
for ($i = 0; $i < 100000; $i ) {

$array []= md5($i);

}

// 删除一半的内存

for ($i = 0; $i < 100000; $i ) {

unset($array[$i]);

}

echo &ldquo;Final: &ldquo;.memory_get_usage().&rdquo; bytes n&rdquo;;

/* prints

Final: 885912 bytes

*/

echo &ldquo;Peak: &ldquo;.memory_get_peak_usage().&rdquo; bytes n&rdquo;;

/* 输出峰值

Peak: 13687072 bytes

*/

4. CPU 使用率情報の取得

メモリ使用量を取得するには、PHP の getrusage() を使用することもできます。 CPU 使用率を取得する場合、この方法は Windows では使用できません。

1
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

print_r(getrusage());

/* 输出

Array

(

[ru_oublock] => 0
 [ru_inblock] => 0
 [ru_msgsnd] => 2
 [ru_msgrcv] => 3
 [ru_maxrss] => 12692
 [ru_ixrss] => 764
 [ru_idrss] => 3864
 [ru_minflt] => 94
 [ru_majflt] => 0
 [ru_nsignals] => 1
 [ru_nvcsw] => 67
 [ru_nivcsw] => 4
 [ru_nswap] => 0
 [ru_utime.tv_usec] => 0
 [ru_utime.tv_sec] => 0
 [ru_stime.tv_usec] => 6269
 [ru_stime.tv_sec] => 0
 )
 
*/
234
567
8
9
10
11
121314
15161718
19
20
21
222324
print_r(getrusage());
<code class="php comments">/* 出力
配列
<codeclass comments>(<div class="linenumber5index4 alt2"> <code class="php space"> [ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
; >[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] ] => 1
[ru_nvcsw] => ; 67
[ru_nivcsw] => /code>
[ru_nswap] => 0
[ru_utime.tv_usec] => 🎜>
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0<codeclass comments>)<div class="linenumber23index22alt2"> <div class="linenumber24index23 alt1"> <code class="php comments">*/

CPU についてよく知らない限り、この構造は非常にわかりにくいように思えます。以下にいくつかの説明を示します:

  • ru_oublock: ブロック出力操作
  • ru_inblock: ブロック入力操作
  • ru_msgsnd: 送信メッセージ
  • ru_msgrcv: 受信メッセージ
  • ru_maxrss: 常駐セットの最大サイズ
  • ru_ixrss: 合計共有メモリ サイズ
  • ru_idrss: 合計非共有メモリ サイズ
  • ru_minflt: ページのリサイクル
  • ru_majflt: ページの無効化
  • ru_nsignals: 受信したシグナル
  • ru_nvcsw: アクティブ コンテキスト スイッチ
  • ru_nivcsw: パッシブ コンテキスト スイッチ
  • ru_nswap: スワップ領域
  • ru_utime.tv_usec: ユーザーモード時間 (マイクロ秒)
  • ru_utime.tv_sec: ユーザーモード時間 (秒)
  • ru_stime.tv_usec: システムカーネル時間 (マイクロ秒)
  • ru_stime.tv_sec: システム カーネル時間 (秒)

スクリプトが消費する CPU の量を確認するには、「ユーザー モード時間」と「システム カーネル」の値を確認する必要があります。時間"。秒とマイクロ秒の部分は個別に提供されます。マイクロ秒の値を 100 万で割って秒の値に加算すると、小数部付きの秒数を取得できます。

// 3 秒間スリープします (非ビジー状態)
sleep(3);
$data = getrusage();<div class="linenumber5index4alt2"> <code class="php space"> echo "ユーザー時間: ".
( $data['ru_utime.tv_sec']
$data['ru_utime.tv_usec'] / 1000000);
echo "システム時間: ".
($data['ru_stime.tv_sec ']
$data['ru_stime.tv_usec'] / 1000000);
/*出力<div class="linenumber13index12alt2"><codeclass comments>ユーザー時間: 0.011552<div class="linenumber14index13alt1"> <code class="php space"> システム時間: 0
*/
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// sleep for 3 seconds (non-busy)
 sleep(3);
 
$data = getrusage();
 echo “User time: “.
 ($data['ru_utime.tv_sec']
 $data['ru_utime.tv_usec'] / 1000000);
 echo “System time: “.
 ($data['ru_stime.tv_sec']
 $data['ru_stime.tv_usec'] / 1000000);
 
/* 输出
User time: 0.011552
 System time: 0
 */
234
567
8
9
10
11
121314
15

スリープはシステム時間を消費しません。次の例を見てみましょう:

1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// loop 10 million times (busy)
 for($i=0;$i<10000000;$i ) {

}

$data = getrusage();

echo &ldquo;User time: &ldquo;.

($data['ru_utime.tv_sec']

$data['ru_utime.tv_usec'] / 1000000);

echo &ldquo;System time: &ldquo;.

($data['ru_stime.tv_sec']

$data['ru_stime.tv_usec'] / 1000000);

/* 输出

User time: 1.424592

System time: 0.004204

*/

2<🎜>3<🎜>4<🎜>5<🎜>6<🎜>
7<🎜>8<🎜>9< 🎜 >
10<🎜>11<🎜>12<🎜>
13<🎜>
14<🎜>
15<🎜>
16<🎜>
17<🎜>
// 1,000 万回ループします (ビジー)<🎜>
</code ><code class="php キーワード">for($i=0;$i<10000000;$i ) {<🎜>
<🎜> }<🎜>
<🎜>$data = getrusage();</ code ><🎜><div class="linenumber7index6alt2"><code class="php space"> echo "ユーザー時間: ".<🎜>
(</ / code><code class="php variable">$data['ru_utime.tv_sec' < code class="php plain">] <🎜>
$データ['ru_utime.tv_usec'] / 1000000 ) ;<🎜>
echo "システム時間: ".<🎜>
($data['ru_stime.tv_sec' < /code><code class="php plain">] <🎜>
$data['ru_stime.tv_usec' ] / 1000000);<🎜>
<🎜>/* 出力 < /code><🎜><div class="linenumber15index14alt2"><codeclass="php comments">ユーザー時間: 1.424592<🎜>
< code class="php space"> システム時間: 0.004204<🎜>
*/<🎜><🎜>

これには約 14 秒の CPU 時間がかかりましたが、システムコールがなかったため、そのほとんどすべてがユーザー時間でした。

システム時間は、CPU がシステム コールでカーネル命令の実行に費やす時間です。以下に例を示します。

<コードクラス="php variable">$start = microtime(true);<🎜>
// microtime を約 3 秒間呼び出し続けます<🎜>
while(microtime(true) – $ start < 3) {<🎜>
<🎜>}<🎜>
<🎜>$data = getrusage();</ code><🎜><div class="linenumber8 index7 alt1"><code class="php space"> echo "ユーザー時間: ".<🎜>
(< /code><code class="php variable">$data['ru_utime.tv_sec' ] <🎜>
$data['ru_utime.tv_usec'] / 1000000 );<🎜>
echo "システム時間: ".<🎜>
($data['ru_stime.tv_sec' ] <🎜>
$data['ru_stime.tv_usec'] / 1000000);<🎜>
<🎜>/* 出力します<🎜>
ユーザー時間: 1.088171<🎜 >
システム時間: 1.675315<🎜>
*/<🎜><🎜>
1
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

$start = microtime(true);

// keep calling microtime for about 3 seconds

while(microtime(true) &ndash; $start < 3) {

}

$data = getrusage();

echo &ldquo;User time: &ldquo;.

($data['ru_utime.tv_sec']

$data['ru_utime.tv_usec'] / 1000000);

echo &ldquo;System time: &ldquo;.

($data['ru_stime.tv_sec']

$data['ru_stime.tv_usec'] / 1000000);

/* prints

User time: 1.088171

System time: 1.675315

*/

2<🎜>
3<🎜>
4<🎜>
5<🎜>6<🎜>7<🎜 >
8<🎜>9<🎜>10<🎜>
11<🎜>
12<🎜>
13<🎜>
14<🎜>
15<🎜>16<🎜>17<🎜 >
18<🎜>

上記の例では、より多くの CPU を消費していることがわかります。

5. システム定数の取得

PHP は、現在の行番号 (__LINE__)、ファイル (__FILE__)、ディレクトリ (__DIR__)、および関数名 ( __FUNCTION__ )、クラス名 (__CLASS__)、メソッド名 (__METHOD__)、および名前空間 (__NAMESPACE__) で、C 言語とよく似ています。

これらは主にデバッグに使用されると考えられますが、必ずしもそうではありません。たとえば、次のように、他のファイルをインクルードするときに ?__FILE__ を使用できます (もちろん、PHP 5.3 以降では __DIR__ を使用することもできます)。は一例です。

1
1

2

3

4

5

6

7

// this is relative to the loaded script&rsquo;s path

// it may cause problems when running scripts from different directories

require_once(&lsquo;config/database.php&rsquo;);

// this is always relative to this file&rsquo;s path

// no matter where it was included from

require_once(dirname(__FILE__) . &lsquo;/config/database.php&rsquo;);

2<🎜>3<🎜>4<🎜 >
5<🎜>6<🎜>7<🎜>
// これはロードされたスクリプトのパスに対する相対パスです <🎜>
// 別のディレクトリからスクリプトを実行すると問題が発生する可能性があります code> code><🎜>
require_once('config/database.php');<🎜>
<🎜>// これは常にこのファイルのパスに対する相対パスです<🎜>
// どこからインクルードされたかは関係ありません<🎜>
require_once(dirname(__FILE__) 。 '/config/database.php');<🎜><🎜>

以下は、__LINE__ を使用して、プログラムのデバッグに役立つデバッグ情報を出力しています:

1
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// some code

// &hellip;

my_debug(&ldquo;some debug message&rdquo;, __LINE__);

/* 输出

Line 4: some debug message

*/

// some more code

// &hellip;

my_debug(&ldquo;another debug message&rdquo;, __LINE__);

/* 输出

Line 11: another debug message

*/

function my_debug($msg, $line) {

echo &ldquo;Line $line: $msgn&rdquo;;

}

2<🎜>< div class="linenumber3index2alt2">3<🎜>4<🎜>5<🎜>6<🎜>
7<🎜>8<🎜> 9<🎜>
10<🎜>11<🎜>12<🎜>< div class="linenumber13index12alt2">13<🎜>14<🎜>15<🎜>16<🎜>
17<🎜>
// いくつかのコード<🎜>
< code class="php comments">// …<🎜>
my_debug(“何らかのデバッグメッセージ”, __LINE__);<🎜>
/* 出力<🎜>
行 4: いくつかのデバッグメッセージ<🎜>
*/<🎜 >
<🎜>// さらにコード<🎜>
// …<🎜>
my_debug(“別のデバッグメッセージ”, __LINE__);</code > <🎜><div class="linenumber11index10alt2"><code class="php space"> /* 出力<🎜>
行 11: 別のデバッグメッセージ<🎜>
< /code><code class="php comments">*/<🎜>
<🎜>function my_debug($msg , $line) {<🎜>
< code class="php space"> echo "Line $行: $msgn"; <🎜>
}<🎜><🎜>

6. 一意の ID を生成します

多くの友人が md5() を使用して一意の番号を生成しますが、md5() にはいくつかの欠点があります。 1. 順序付けされていないため、データベースが中程度の並べ替えになります。パフォーマンスが低下します。 2. 長すぎるため、より多くの保管スペースが必要になります。実際、PHP には一意の ID を生成する関数が付属しています。この関数は uniqid() です。使用法は次のとおりです:

1
1

2

3

4

5

6

7

8

9

10

11

// generate unique string

echo uniqid();

/* 输出

4bd67c947233e

*/

// generate another unique string

echo uniqid();

/* 输出

4bd67c9472340

*/

2<🎜>
3<🎜>
4<🎜>
5<🎜>6<🎜>7< 🎜>
8<🎜>9<🎜>10<🎜>
11<🎜>
// 一意の文字列を生成します<🎜>
echo</ code> <code class="php plain">uniqid();<🎜>
/* 出力<🎜>
4bd67c947233e<🎜>
*/<🎜>
<🎜>< div class="linenumber7index6alt2">// 別の一意の文字列を生成します<🎜>
echo uniqid();<🎜>
< code class="php space"> /* 出力<🎜>
4bd67c9472340<🎜>
*/ <🎜 ><🎜>

このアルゴリズムは CPU タイムスタンプに基づいて生成されるため、同様の期間では ID の最初の数桁は同じになります。これは、必要に応じて ID を並べ替えるのにも便利です。繰り返しになりますが、

のように、ID の前にプレフィックスを追加できます。 < /tr >
1
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 前缀

echo uniqid(&lsquo;foo_&rsquo;);

/* 输出

foo_4bd67d6cd8b8f

*/

// 有更多的熵

echo uniqid(&rdquo;,true);

/* 输出

4bd67d6cd8b926.12135106

*/

// 都有

echo uniqid(&lsquo;bar_&rsquo;,true);

/* 输出

bar_4bd67da367b650.43684647

*/

2<🎜>3 <🎜>
4<🎜>5<🎜>6<🎜>
7<🎜>
8<🎜>9<🎜>
10 <🎜>
11<🎜>12<🎜>13 <🎜>
14<🎜>15<🎜>16<🎜>
17<🎜>
// プレフィックス<🎜>
echo uniqid(' foo_');< /code><🎜><div class="linenumber3 index2 alt2"><code class="php space"> /* 出力</code ><🎜>< div class="linenumber4index3alt1"><code class="php comments">foo_4bd67d6cd8b8f<🎜>
</code ><code class="php comments">*/<🎜>
<🎜>< code class="php comments">// より多くのエントロピーがある<🎜>
echouniqid(",true);<🎜>
/* 出力<🎜>
4bd67d6cd8b926.12135106<🎜>
< code class="php space"> */<🎜>
<🎜>
// 両方<🎜>
echo</ code> <code class="php plain">uniqid('bar_',true);<🎜>
</code >< code class="php comments">/* 出力<🎜>
bar_4bd67da367b650.43684647<🎜>
*/<🎜><🎜>

7. シリアル化

PHP シリアル化関数は、データをデータベースまたはファイルに保存する必要がある場合に使用することができ、より一般的です。 PHP の unserialize() メソッドはシリアル化と逆シリアル化を実装します。コードは次のとおりです。

3

45
6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

// 一个复杂的数组

$myvar= array(

&lsquo;hello&rsquo;,

42,

array(1,&rsquo;two&rsquo;),

&lsquo;apple&rsquo;

);

// 序列化

$string= serialize($myvar);

echo$string ;

/* 输出

a:4:{i:0;s:5:&rdquo;hello&rdquo;;i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:&rdquo;two&rdquo;;}i:3;s:5:&rdquo;apple&rdquo;;}

*/

// 反序例化

$newvar= unserialize($string);

[2] => Array
 (
 [0] => 1
 [1] => two
 )
[3] => apple
 )
 */

json 形式にシリアル化する方法は、php 5.2 以降を使用しているユーザーは、json_encode() 関数と json_decode() 関数を使用して既に実行できますので、心配しないでください。 json 形式でのコードは次のとおりです:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// a complex array
 $myvar = array(
‘hello’,
42,
 array(1,’two’),
‘apple’
);
// convert to a string
 $string = json_encode($myvar);
echo $string;
 /* prints
 ["hello",42,[1,"two"],”apple”]
 */
// you can reproduce the original variable
 $newvar = json_decode($string);
print_r($newvar);
 /* prints
 Array
 (
 [0] => hello
 [1] => 42
 [2] => Array
 (
 [0] => 1
 [1] => two
 )
[3] => apple
 )
 */

  8、字符串压缩

  当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了?gzcompress() 和 gzuncompress() 函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$string =
“Lorem ipsum dolor sit amet, consectetur
 adipiscing elit. Nunc ut elit id mi ultricies
関連ラベル:
ソース:php.cn
前の記事:phpのcurlで不完全な情報が取得される、それを解決する方法 次の記事:PHPで生成した認証コード画像が表示されない問題の解決方法
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート