亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
報(bào)酬ラウンド!
JavaScript関數(shù)內(nèi)でPHPコードを使用できますか?
Codeceptionを使用してPHPコードをテストする方法は?
JavaScriptでPHPコードを書き込む方法は?
ホームページ バックエンド開発 PHPチュートリアル PHPでJavaScriptスタイルのテストウォッチャーを書く方法

PHPでJavaScriptスタイルのテストウォッチャーを書く方法

Feb 09, 2025 am 10:58 AM

How to Write JavaScript-Style Test Watchers in PHP

コアポイント

    JavaScriptスタイルのテストオブザーバーをPHPプロジェクトに統(tǒng)合し、ファイル変換の前処理を自動(dòng)化し、ファイルが変更されたときにユニットテストを再実行し、開発効率を改善します。
  • phpunitなどのツールを使用して自動(dòng)テストをセットアップし、phpunit-watcherを使用してファイル変更を観察し、開発中の即時(shí)のフィードバックとエラーの検出を確保します。
  • PHPプロジェクトに前処理スクリプトを?qū)g裝し、JavaScript Babelと同様の構(gòu)文変換を許可するため、互換性を向上させ、手動(dòng)エンコードの取り組みを削減します。
  • PHPテスト環(huán)境を構(gòu)成して、テストする前に事前に処理されたファイルを自動(dòng)的に再構(gòu)築し、正確なコードカバレッジを維持し、テストプロセスを簡素化します。
  • ファイルオブザーバーを使用して高度な構(gòu)成を調(diào)査して、変更されたファイルのみを選択的に再構(gòu)築し、大規(guī)模プロジェクトの多數(shù)のファイルのテストサイクルを大幅に高速化します。
この記事は、Younes Rafieによってレビューされました。 SitePointコンテンツを最高の狀態(tài)にしてくれたすべてのSitePointピアレビューアに感謝します!

最初にコードのテストを書きませんでした。多くの人と同様に、私の「テスト」はコードを書き、ページを更新しています。 「それは正しく見えますか?」それが正しいと思うなら、私は続けます。

実際には、私が行った仕事のほとんどは、他の形式のテストについてあまり気にしない企業(yè)にとってです。長年の経験と、クリス?ハルジェスのような人々からの賢明なアドバイスの後、私はテストの価値を見ました。そして、私はまだ良いテストがどのように見えるかを?qū)Wんでいます。

How to Write JavaScript-Style Test Watchers in PHP 私は最近、バンドルされたテストオブザーバーを含むいくつかのJavaScriptプロジェクトの取り組みを開始しました。

これは、テスト駆動(dòng)型のnodejs開発に関する素晴らしい高度なビデオチュートリアルです!

JavaScriptの世界では、ソースコードを前処理することは珍しくありません。 JavaScriptの世界では、開発者はサポートされていない構(gòu)文を使用してコードを作成し、多くの場(chǎng)合Babelと呼ばれるツールを使用して、コードを広くサポートされている構(gòu)文に変換します。

変換スクリプトを呼び出すための負(fù)擔(dān)を減らすために、VoilerPlateプロジェクトはファイルの変更を自動(dòng)的に監(jiān)視するスクリプトを含め始めました。

私が取り組んだプロジェクトは、再実行ユニットテストに対して同様のアプローチを取りました。 JavaScriptファイルを変更すると、ファイルが変換され、ユニットテストが再実行されます。これにより、何かが壊れているかどうかをすぐに確認(rèn)できます。

このチュートリアルのコードはgithubで見つけることができます。 PHP 7.1でテストしました。

プロジェクト設(shè)定

これらのプロジェクトに取り組み始めて以來、phpunitに似たようなもののセットアップを開始しました。実際、PHPunitオブザーバースクリプトをセットアップした最初のプロジェクトは、ファイルを事前に処理するPHPプロジェクトです。

プロジェクトにプリプロセシングスクリプトを追加した後、それはすべて始まった:

composer require pre/short-closures

これらの特定の前処理スクリプトを使用すると、PSR-4の自動(dòng)ロードされたクラス(Path/to/file.php?Path/to/file.pre)を変更して、提供する機(jī)能にオプトインできます。そこで、私は私のcomposer.jsonファイルに次のものを追加しました:

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}

これはcomposer.json

からです

次に、現(xiàn)在のユーザーセッションの詳細(xì)を含む関數(shù)を生成するクラスを追加しました:

namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}

これはsrc/session.pre

に由來します

これが機(jī)能するかどうかを確認(rèn)するには、小さなサンプルスクリプトをセットアップします。

require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
これはexample.pre

に由來します

…そして、非PSR-4クラスで短い閉鎖を使用したいので、ローダーをセットアップする必要があります:

require_once __DIR__ . "/vendor/autoload.php";

Pre\Plugin\process(__DIR__ . "/example.pre");
これはroader.php

に由來します

コードのこのセクションは、小さなポイントを説明することがたくさんあります。セッションクラスには、1つの閉鎖を受け入れ、別の閉鎖を返す閉鎖的な方法があります。呼び出されると、この新しい閉鎖は元の閉鎖を呼び出し、ユーザーセッションアレイをパラメーターとして提供します。

このすべてを?qū)g行するには、端末を入力してください:

php loader.php

サイドノートとして、これらの前処理は非常に美しい効果的なPHP構(gòu)文を生成します。このように見えます:

$closure = function ($user) {
   print "user: " . $user["id"] . PHP_EOL;
};

…および

public function closureWithUser(Closure $closure)
{
   return [$closure = $closure ?? null, "fn" => function () use (&$closure) {
       $closure($this->user);
   }]["fn"];
}

PHPとPREファイルの両方をリポジトリに送信したくない場(chǎng)合があります。これを行うには、app/**/*。php and emply.phpを.gitignoreに追加しました。

テストの設(shè)定

では、これをどのようにテストしますか? Phpunit:

のインストールから始めましょう

composer require --dev phpunit/phpunit
次に、構(gòu)成ファイルを作成する必要があります:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    backupGlobals="false"
    backupStaticAttributes="false"
    bootstrap="vendor/autoload.php"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="false"
    processIsolation="false"
    stopOnFailure="false"
    syntaxCheck="false"
>
    <testsuites>
        <testsuite>
            <directory suffix="Test.php">tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
        </whitelist>
    </filter>
</phpunit>
これはphpunit.xml

からです

ベンダー/bin/phpunitを?qū)g行すると、機(jī)能します。しかし、私たちはまだテストしていません。やりましょう:

namespace App\Tests;

use App\Session;
use PHPUnit\Framework\TestCase;

class SessionTest extends TestCase
{
    public function testClosureIsDecorated()
    {
        $user = ["id" => 1];
        $session = new Session($user);

        $expected = null;

        $closure = function($user) use (&$expected) {
            $expected = "user: " . $user["id"];
        };

        $closureWithUser = $session
            ->closureWithUser($closure);

        $closureWithUser();

        $this->assertEquals("user: 1", $expected);
    }
}
これは、tests/sessiontest.php

に由來します

ベンダー/bin/phpunitを?qū)g行すると、単一のテストが渡されます。うん!

何が欠けているのですか?

これまでのところ、すべてがうまくいきました。このコードの小さな部分とこのコードのテストを書きました。プリプロセシングがどのように機(jī)能するかを心配する必要さえありません(JavaScriptプロジェクトよりもステップアップ)。

コードカバレッジを確認(rèn)しようとすると問題が始まります。

セッションをテストしたときに、カバレッジが報(bào)告されます。シンプルなクラスなので、100%のカバレッジを達(dá)成しました。ただし、別のクラスを追加する場(chǎng)合:
vendor/bin/phpunit --coverage-html coverage

namespace App; class BlackBox { public function get($key) { return $GLOBALS[$key]; } }から來ています

カバレッジをチェックするとどうなりますか?まだ100%。

これは、blackbox.preをロードするテストがないために発生します。つまり、コンパイルされていないことを意味します。したがって、Phpunitが上書きされたPHPファイルを探すと、この前処理可能なファイルが表示されません。

テストする前にすべてのファイルを構(gòu)築します

テストを?qū)g行しようとする前に、すべてのPREファイルを作成する新しいスクリプトを作成しましょう。

composer require pre/short-closures
これは、テスト/bootstrap.php
に由來します

ここでは、3つの関數(shù)を作成します。1つは再帰ファイルイテレータ(パスから)、1つはこのイテレーターを削除し、1つはPREファイルを再コンパイルするためです。

Phpunit.xmlの現(xiàn)在のBootstrapファイルを置き換える必要があります:

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
これはphpunit.xml
からです

さて、テストを?qū)g行するたびに、このスクリプトは最初にすべての事前ファイルをPHPファイルにクリーニングして再構(gòu)築します。カバレッジが正しく報(bào)告されており、幸せな旅を続けることができます…
これとは別に...

コードベースは小さいですが、小さい必要はありません。これを?qū)g際のアプリケーションで試してみることができ、テストするたびにファイルを再構(gòu)築する必要があることをすぐに後悔します。

このプロジェクトでは、私が言及したこのプロジェクトでは、101の事前ファイルがあります。私の(できれば迅速な)ユニットテストスイートを?qū)g行するためには、これには多くの前処理が必要です。変更を監(jiān)視し、重要な部分のみを再構(gòu)築する方法が必要です。まず、ファイルオブザーバーをインストールしてみましょう:

次に、テストスクリプトを作成しましょう:

namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}

これは、スクリプト/ウォッチテスト

に由來します
require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
このスクリプトは、Symfony Finderを作成します(SRCとテストフォルダーをスキャンするために使用されます)。一時(shí)的な変更ファイルを定義しましたが、これは私たちがしていることに厳密に必要ではありません。次に、無限ループを使用します。 ResourceWatcherには、ファイルが作成、変更、または削除されたかどうかを確認(rèn)するために使用できる方法があります。

新規(guī)、どのファイルが変更されたかを見つけて再構(gòu)築しましょう。

これは、スクリプト/ウォッチテスト

に由來します

require_once __DIR__ . "/vendor/autoload.php";

Pre\Plugin\process(__DIR__ . "/example.pre");
このコードは、Bootstrapファイルで行うことに似ていますが、変更されたファイルにのみ適用されます。また、ファイルが変更されたら、テストを再実行する必要があります。

これは、スクリプト/ウォッチテスト
に由來します

いくつかの環(huán)境変數(shù)を?qū)毪筏皮い蓼埂¥长欷椁螇鋽?shù)を好みに合わせて管理できますが、作曲家スクリプトに追加することをお?jiǎng)幛幛筏蓼埂?
php loader.php

これはcomposer.json

からです

app_coverはそれほど重要ではありません。スクリプトにコードカバレッジが含まれているかどうかをオブザーバーに伝えるだけです。 APP_REBUILDはより重要な役割を再生します。TESTS/bootstrap.phpファイルがロードされたときにpreファイルが再構(gòu)築されるかどうかを制御します。ファイルが要求されたときにのみ再構(gòu)築されるように、ファイルを変更する必要があります:

$closure = function ($user) {
   print "user: " . $user["id"] . PHP_EOL;
};

これは、テスト/bootstrap.php

に由來します
また、ブートストラップコードを含める前に、この環(huán)境変數(shù)を設(shè)定するためにオブザーバースクリプトを変更する必要があります。オブザーバースクリプト全體が次のようになります:

public function closureWithUser(Closure $closure)
{
   return [$closure = $closure ?? null, "fn" => function () use (&$closure) {
       $closure($this->user);
   }]["fn"];
}
これは、スクリプト/ウォッチテスト

に由來します

今では、事前に処理可能なファイルが変更されるたびにテストを開始し、テストを?qū)g行できるはずです...

How to Write JavaScript-Style Test Watchers in PHP

覚えておくべきいくつかのこと(rawr)。まず、オブザーバースクリプトを?qū)g行するには、chmod xスクリプト/*が必要です。次に、config:{process-timeout:0}(composer.json)を設(shè)定する必要があります。そうしないと、オブザーバーは300秒後に死亡します。

報(bào)酬ラウンド!

このテストオブザーバーは、クールな副作用も有効にしました。これは、PHPunitテストでプリプロセッサ/変換を使用する機(jī)能です。テスト/bootstrap.phpにコードを追加した場(chǎng)合:

composer require pre/short-closures

これは、テスト/bootstrap.php

に由來します

…そして、テストファイルでの前処理を有効にします(preの場(chǎng)合、それを.preに変更することを意味します)。次に、テストファイルで同じプリプロセッサの使用を開始できます。

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
これは、テスト/sessiontest.pre

に由來します

結(jié)論

このようなテストオブザーバーを作成しようとする前に、私が非常に多くのプリプロセッサの作業(yè)をしたとは信じられません。これは、他の言語やフレームワークから學(xué)ぶことができることを証明します。これらのJavaScriptプロジェクトに関與していない場(chǎng)合は、各テストを?qū)g行する前にファイルを再構(gòu)築し続ける場(chǎng)合があります。吐き気!

この方法はあなたにとって効果的ですか?非同期HTTPサーバーまたはその他の長期にわたるプロセスに適応できます。コメントであなたの考えを教えてください。

JavaScriptスタイルテストオブザーバーのFAQ(FAQ)

PHPでJavaScriptスタイルのテストオブザーバーをセットアップする方法は? PHPでJavaScriptスタイルのテストオブザーバーをセットアップするには、複數(shù)のステップが含まれます。まず、phpunitとphpunit-watcherをインストールする必要があります。 Phpunitは、コードのテストを作成する方法を提供するPHPのテストフレームワークです。 Phpunit-watcherは、ファイルを保存するときにコードを監(jiān)視し、phpunitテストを?qū)g行するツールです。これらのツールをインストールした後、コードを監(jiān)視してテストを自動(dòng)的に実行するようにphpunit-watcherを構(gòu)成できます。この設(shè)定を使用すると、コードの変更に関するフィードバックをすぐに取得できます。これにより、エラーをより迅速に発見して修正するのに役立ちます。

PHPでテストオブザーバーを使用することの利點(diǎn)は何ですか?

PHPでテストオブザーバーを使用することには多くの利點(diǎn)があります。コードの変更に関する即時(shí)フィードバックを提供します。これにより、エラーをより速く検出および修正するのに役立ちます。また、コードを変更するたびに手動(dòng)でテストを?qū)g行する必要がないため、時(shí)間を節(jié)約できます。さらに、コードのテストを作成することをお?jiǎng)幛幛筏蓼?。これにより、コードの品質(zhì)が向上し、維持が容易になります。

JavaScript関數(shù)內(nèi)でPHPコードを使用できますか?

はい、JavaScript関數(shù)內(nèi)でPHPコードを使用できますが、これは推奨されません。 PHPはサーバー側(cè)の言語であり、JavaScriptはクライアント側(cè)の言語です。これは、ページがクライアントに送信される前にPHPコードがサーバーで実行され、ページが受信された後にJavaScriptコードがクライアントで実行されることを意味します。したがって、JavaScript関數(shù)內(nèi)でPHPコードを使用しようとすると、PHPコードはJavaScript関數(shù)の前に実行され、予期しない結(jié)果につながる可能性があります。

Codeceptionを使用してPHPコードをテストする方法は?

Codeceptionは、単體テスト、機(jī)能テスト、および受け入れテストをサポートするPHPのテストフレームワークです。 CodeceptionでPHPコードをテストするには、まずCodeceptionをインストールし、プロジェクト用に構(gòu)成する必要があります。次に、Codeceptionの構(gòu)文を使用してコードのテストを作成し、CodeCeptionのコマンドラインツールを使用してテストを?qū)g行できます。

JavaScriptでPHPコードを書き込む方法は?

技術(shù)的にはJavaScriptでPHPコードを記述できますが、これは推奨されません。 PHPはサーバー側(cè)の言語であり、JavaScriptはクライアント側(cè)の言語です。これは、ページがクライアントに送信される前にPHPコードがサーバーで実行され、ページが受信された後にJavaScriptコードがクライアントで実行されることを意味します。したがって、JavaScriptでPHPコードを記述しようとすると、PHPコードがJavaScriptコードの前に実行され、予期しない結(jié)果につながる可能性があります。代わりに、Ajaxを使用してクライアントからサーバーにデータを送信する方が良いでしょう。

以上がPHPでJavaScriptスタイルのテストウォッチャーを書く方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場(chǎng)合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機(jī)能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時(shí)的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお?jiǎng)幛幛筏蓼埂?2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時(shí)にネストを避ける必要があります。

発電機(jī)はPHPでどのように機(jī)能しますか? 発電機(jī)はPHPでどのように機(jī)能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動(dòng)で出力する必要がある理由など、ロジックの背後にある理由を強(qiáng)調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 Jul 12, 2025 am 03:15 AM

PHPでは、四角い括弧または巻き毛裝具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお?jiǎng)幛幛筏蓼?。インデックス?から始まり、範(fàn)囲外のアクセスはnull値を返し、値を割り當(dāng)てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結(jié)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(shù)を均一に使用することをお?jiǎng)幛幛筏蓼埂?/p>

PHPの學(xué)習(xí):初心者向けガイド PHPの學(xué)習(xí):初心者向けガイド Jul 18, 2025 am 04:54 AM

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

See all articles