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

目次
クエリスコープを使用すると、再利用可能な方法で雄弁なクエリの制約を定義できます。これらは通常、Laravelモデルのメソッド、または
グローバルクエリスコープを使用します。この範(fàn)囲は、モデル上のすべてのクエリに
以前の例から始めましょう
ホームページ バックエンド開発 PHPチュートリアル Laravelでクエリスコープをマスターすることを?qū)Wびます

Laravelでクエリスコープをマスターすることを?qū)Wびます

Mar 06, 2025 am 02:28 AM

<p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174119929536701.jpg" class="lazy" alt="Learn to master Query Scopes in Laravel"></p> <p>Laravelアプリケーションを構(gòu)築する場(chǎng)合、アプリケーション全體の複數(shù)の場(chǎng)所で使用される制約のあるクエリを作成する必要がある場(chǎng)合があります。多分あなたはマルチテナントアプリケーションを構(gòu)築しており、ユーザーのチームによってフィルタリングするためにクエリに常に<code>where</code>制約を追加する必要があります。または、ブログを構(gòu)築している場(chǎng)合があり、ブログ投稿が公開されている場(chǎng)合は、クエリに<code>where</code>制約を常に追加する必要があります。 </p> Laravelでは、クエリスコープを使用して、これらの制約を1つの場(chǎng)所にきちんと維持し、再利用できます。 <p> この記事では、ローカルクエリスコープとグローバルクエリスコープを調(diào)査します。 2つの違い、獨(dú)自のクエリスコープを作成する方法、およびそれらのテストを作成する方法を?qū)Wびます。 </p> この記事を読んだ後、Laravelアプリケーションでクエリスコープを自信を持って使用できるはずです。 <p> </p>クエリスコープとは何ですか? <p> </p> <h1 id="クエリスコープを使用すると-再利用可能な方法で雄弁なクエリの制約を定義できます-これらは通常-Laravelモデルのメソッド-または">クエリスコープを使用すると、再利用可能な方法で雄弁なクエリの制約を定義できます。これらは通常、Laravelモデルのメソッド、または</h1>インターフェイスを?qū)g裝するクラスとして定義されます。 <hr> <p>再利用可能なロジックを1つの場(chǎng)所で定義するのに理想的であるだけでなく、単純な関數(shù)呼び出し後に複雑なクエリ制約を隠すことでコードをより読みやすくすることもできます。 <code>IlluminateDatabaseEloquentScope</code> クエリ範(fàn)囲は2つのタイプに分かれています:</p> <p> </p>ローカルクエリ範(fàn)囲 - これらの範(fàn)囲をクエリに手動(dòng)で適用する必要があります。 <p> </p>グローバルクエリスコープ - デフォルトでは、クエリが登録されている場(chǎng)合、これらの範(fàn)囲はモデル上のすべてのクエリに適用されます。 <ul> <li> </li> Laravelに組み込まれた「ソフト削除」機(jī)能を使用したことがある場(chǎng)合は、クエリスコープを知らないうちに使用した可能性があります。 Laravelはローカルクエリスコープを使用して、モデル上の<li>や</li>などのメソッドを提供します。また、グローバルクエリスコープを使用して、モデル上のすべてのクエリに</ul>制約を自動(dòng)的に追加して、クエリでデフォルトでソフト削除レコードが返されないようにします。 <p> <code>withTrashed</code>Laravelアプリケーションでローカルクエリスコープとグローバルクエリスコープを作成および使用する方法を見てみましょう。 <code>onlyTrashed</code> <code>whereNull('deleted_at')</code>ローカルクエリスコープ</p> <p> </p>ローカルクエリスコープは、雄弁モデルのメソッドとして定義されているため、モデルクエリに手動(dòng)で適用できる制約を定義できます。 <h1> </h1>管理パネルを使用してブログアプリケーションを構(gòu)築しているとします。管理パネルには、2つのページがあります。1つは公開されたブログ投稿をリストし、未発表のブログ投稿をリストするためのページです。 <hr> <p>ブログ投稿には<code>AppModelsArticle</code>モデルを使用してアクセスされ、データベーステーブルにはブログ投稿の公開時(shí)間を保存する空の<code>published_at</code>列があると想定しています。 <code>published_at</code>が過去にリストされている場(chǎng)合、ブログ投稿は公開されていると見なされます。 <code>published_at</code>が將來リストされている場(chǎng)合、または<code>null</code>である場(chǎng)合、ブログ投稿は未発表とみなされます。 </p> <p>公開されたブログ投稿を取得するには、次のクエリを書くことができます。 </p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->where('published_at', '<', now()) ->get();</code></pre>未発表のブログ投稿を取得するには、次のクエリを書くことができます。 <p> </p>上記のクエリは特に複雑ではありません。ただし、アプリケーション全體の複數(shù)の場(chǎng)所でそれらを使用するとします。発生數(shù)が増えると、私たちが間違いを犯したり、1か所でクエリを更新するのを忘れたりする可能性が増えています。たとえば、開発者は、公開されたブログ投稿を照會(huì)するために<pre class="brush:php;toolbar:false"><code>use App\Models\Article; use Illuminate\Contracts\Database\Eloquent\Builder; $unpublishedPosts = Article::query() ->where(function (Builder $query): void { $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }) ->get();</code></pre>の代わりに誤って<p>を使用する場(chǎng)合があります。あるいは、ブログ投稿が公開されているかどうかを判斷するロジックが変更される可能性があり、すべてのクエリを更新する必要があります。 <code>>=</code> <code><</code>これは、クエリスコープが非常に便利な場(chǎng)所です。それでは、</p>モデルにローカルクエリスコープを作成して、クエリを整理しましょう。 <p> <code>AppModelsArticle</code>ローカルクエリスコープは、</p>で始まり、スコープの予想名で終了するメソッドを作成することによって定義されます。たとえば、<p>という名前のメソッドは、モデルに<code>scope</code>範(fàn)囲を作成します。このメソッドは、<code>scopePublished</code>インスタンスを受け入れて、<code>published</code>インスタンスを返す必要があります。 <code>IlluminateContractsDatabaseEloquentBuilder</code> <code>IlluminateContractsDatabaseEloquentBuilder</code> </p>モデルに両方の範(fàn)囲を追加します:<p> <code>AppModelsArticle</code> 上記の例で見たように、</p>前のクエリからの制約を2つの別々のメソッドに移動(dòng)しました:<pre class="brush:php;toolbar:false"><code>declare(strict_types=1); namespace App\Models; use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; final class Article extends Model { public function scopePublished(Builder $query): Builder { return $query->where('published_at', '<', now()); } public function scopeNotPublished(Builder $query): Builder { return $query->where(function (Builder $query): Builder { return $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }); } // ... }</code>と</p> <p>。このようなクエリでこれらの範(fàn)囲を使用できるようになりました。 <code>where</code> 私の個(gè)人的な意見では、これらのクエリが読みやすく、理解しやすいと思います。これはまた、將來同じ制約でクエリを書く必要がある場(chǎng)合、これらのスコープを再利用できることを意味します。 <code>scopePublished</code> <code>scopeNotPublished</code>グローバルクエリスコープ</p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->published() ->get(); $unpublishedPosts = Article::query() ->notPublished() ->get();</code></pre> <p>グローバルクエリスコープは、ローカルクエリスコープと同様の関數(shù)を?qū)g行します。ただし、クエリごとに手動(dòng)で適用されるわけではありませんが、モデル上のすべてのクエリに自動(dòng)的に適用されます。 </p> 前述のように、Laravelの組み込み「Soft Delete」関數(shù)は、<h1 id="グローバルクエリスコープを使用します-この範(fàn)囲は-モデル上のすべてのクエリに">グローバルクエリスコープを使用します。この範(fàn)囲は、モデル上のすべてのクエリに</h1>制約を自動(dòng)的に追加します。それがどのように機(jī)能するかを理解することに興味がある場(chǎng)合は、GitHubのソースコードをこちらで確認(rèn)できます。 <hr> たとえば、<p>管理パネルを使用してマルチテナントブログアプリケーションを構(gòu)築しているとします。ユーザーが自分のチームに屬する記事を表示できるようにするだけかもしれません。したがって、次のようなクエリを書くことができます:</p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->where('published_at', '<', now()) ->get();</code></pre> <p>このクエリは良いですが、<code>where</code>制約を追加するのを忘れがちです。別のクエリを書いて制約を追加するのを忘れている場(chǎng)合、ユーザーがチームの一部ではない記事と対話できるようにするアプリケーションのエラーが発生します。もちろん、私たちはこれが起こることを望んでいません! </p> これを防ぐために、すべての<p>モデルクエリに自動(dòng)的に適用できるグローバルな範(fàn)囲を作成できます。 <code>AppModelArticle</code> </p>#グローバルクエリスコープを作成する方法<h3> </h3>すべてのクエリを<p>列でフィルターするグローバルクエリスコープを作成しましょう。 <code>team_id</code> </p>この記事の目的のために、例を簡(jiǎn)単に保つことに注意してください。実際のアプリケーションでは、ユーザーが認(rèn)証されていない、またはユーザーが複數(shù)のチームに屬しているなどの狀況に対処するために、より強(qiáng)力なアプローチを使用することをお?jiǎng)幛幛筏蓼?。しかし、今のところ、グローバルクエリ範(fàn)囲の概念に集中できるように、シンプルにしておきましょう。 <p> </p>最初にターミナルで次の職人コマンドを?qū)g行します:<p> </p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; use Illuminate\Contracts\Database\Eloquent\Builder; $unpublishedPosts = Article::query() ->where(function (Builder $query): void { $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }) ->get();</code></pre>これにより、新しい<p>ファイルが作成されるはずです。このファイルを更新してから、完成したコードを確認(rèn)します。 <code>app/Models/Scopes/TeamScope.php</code> 上記のコードの例では、</p>インターフェイスを?qū)g裝し、<pre class="brush:php;toolbar:false"><code>declare(strict_types=1); namespace App\Models; use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; final class Article extends Model { public function scopePublished(Builder $query): Builder { return $query->where('published_at', '<', now()); } public function scopeNotPublished(Builder $query): Builder { return $query->where(function (Builder $query): Builder { return $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }); } // ... }</code></pre>と呼ばれる?yún)g一のメソッドがある新しいクラスがあることがわかります。これは、モデルクエリに適用する制約を定義する方法です。 <p> <code>IlluminateDatabaseEloquentScope</code>グローバルスコープが利用可能になりました。これは、ユーザーチームにクエリを絞り込む任意のモデルに追加できます。 <code>apply</code> </p> <p>モデルに適用しましょう。 </p> <p> #applyグローバルクエリスコープ<code>AppModelsArticle</code> </p>モデルにグローバルスコープを適用する方法はいくつかあります。最初の方法は、モデルに<h3>屬性を使用することです。 </h3> <p>もう1つの方法は、モデルの<code>IlluminateDatabaseEloquentAttributesScopedBy</code>メソッドで</p>メソッドを使用することです。 <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->published() ->get(); $unpublishedPosts = Article::query() ->notPublished() ->get();</code></pre> <p>両方のメソッドは、<code>booted</code>モデルのすべてのクエリに<code>addGlobalScope</code>制約を適用します。 </p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $articles = Article::query() ->where('team_id', Auth::user()->team_id) ->get();</code></pre>これは、<p>列のフィルタリングを心配せずにクエリを書くことができることを意味します:<code>where('team_id', Auth::user()->team_id)</code> <code>AppModelsArticle</code> </p>ユーザーが<p>であるチームに屬していると仮定した場(chǎng)合、上記のクエリのために次のSQLが生成されます。 <code>team_id</code> </p>これはかっこいいですよね? ! <pre class="brush:php;toolbar:false"><code>php artisan make:scope TeamScope</code></pre> <p> #anonymousグローバルクエリスコープ<code>team_id</code> <code>1</code>グローバルクエリ範(fàn)囲を定義および適用する別の方法は、匿名のグローバルスコープを使用することです。 </p> <pre class="brush:php;toolbar:false"><code>declare(strict_types=1); namespace App\Models\Scopes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; use Illuminate\Support\Facades\Auth; final readonly class TeamScope implements Scope { /** * Apply the scope to a given Eloquent query builder. */ public function apply(Builder $builder, Model $model): void { $builder->where('team_id', Auth::user()->team_id); } }</code></pre>匿名のグローバルスコープを使用するように<p>モデルを更新してみましょう:</p> <h3> 上記のコードの例では、</h3>メソッドを使用して、モデルの<p>メソッドで匿名のグローバルスコープを定義しました。 </p>メソッドは、2つのパラメーターを受け入れます<ul> <li>スコープの名前 - クエリで無視する必要がある場(chǎng)合は、この名前を使用してスコープを參照できます</li> <li>範(fàn)囲の制約 - 閉鎖を定義して制約に適用する</li> </ul> <p>他の方法と同様に、これは<code>where('team_id', Auth::user()->team_id)</code>モデルのすべてのクエリに<code>AppModelsArticle</code>制約を適用します。 </p> 私の経験では、匿名のグローバル範(fàn)囲は、別のクラスでグローバル範(fàn)囲を定義するほど一般的ではありません。しかし、緊急事態(tài)の場(chǎng)合に利用できることを知ることは有益です。 <p> </p> #ignoreグローバルクエリスコープ<h3> </h3>モデルに適用されたグローバルクエリスコープを使用しないクエリを作成する場(chǎng)合があります。たとえば、グローバルクエリの範(fàn)囲に関係なく、すべてのレコードを含める必要があるレポートまたは分析クエリを作成する場(chǎng)合があります。 <p> </p>これが當(dāng)てはまる場(chǎng)合、2つの方法のいずれかを使用して、グローバルな範(fàn)囲を無視できます。 <p> </p>最初の方法は<p>です。この方法では、パラメーターが渡されない場(chǎng)合、モデル上のすべてのグローバルスコープを無視できます。 <code>withoutGlobalScopes</code> </p>または、グローバルスコープの特定のセットのみを無視したい場(chǎng)合は、スコープ名を<pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->where('published_at', '<', now()) ->get();</code></pre>メソッドに渡すことができます:<p> <code>withoutGlobalScopes</code> 上記の例では、</p>および<pre class="brush:php;toolbar:false"><code>use App\Models\Article; use Illuminate\Contracts\Database\Eloquent\Builder; $unpublishedPosts = Article::query() ->where(function (Builder $query): void { $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }) ->get();</code></pre>と呼ばれる別の架空の匿名のグローバル範(fàn)囲を無視します。 <p> <code>AppModelsScopesTeamScope</code>または、単一のグローバルスコープのみを無視したい場(chǎng)合は、<code>another_scope</code>メソッドを使用できます。 </p> グローバルクエリスコープ<p>の##precautions <code>withoutGlobalScope</code>グローバルクエリスコープは、モデルを介して行われたクエリのみに適用されることを覚えておくことが重要です。 </p>外観を使用してデータベースクエリを記述する場(chǎng)合、グローバルクエリスコープは適用されません。 <pre class="brush:php;toolbar:false"><code>declare(strict_types=1); namespace App\Models; use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; final class Article extends Model { public function scopePublished(Builder $query): Builder { return $query->where('published_at', '<', now()); } public function scopeNotPublished(Builder $query): Builder { return $query->where(function (Builder $query): Builder { return $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }); } // ... }</code></pre> たとえば、このクエリを書いて、ログインしたユーザーのチームに屬する記事のみをクロールしたいとしてください。 <h3> 上記のクエリでは、</h3>モデルのグローバルクエリスコープが<p>モデルで定義されている場(chǎng)合でも、スコープは適用されません。したがって、データベースクエリに制約が手動(dòng)で適用されることを確認(rèn)する必要があります。 <code>IlluminateSupportFacadesDB</code> </p>ローカルクエリスコープ<p>をテストします </p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->published() ->get(); $unpublishedPosts = Article::query() ->notPublished() ->get();</code></pre>クエリスコープの作成と使用方法を?qū)Wんだので、それらのテストを作成する方法について説明します。 <p> <code>AppModelsArticle</code>クエリの範(fàn)囲をテストするにはいくつかの方法があり、選択した方法は、あなたの個(gè)人的な好みや書いている範(fàn)囲のコンテンツに依存する場(chǎng)合があります。たとえば、スコープのユニットスタイルのテストをさらに作成することをお?jiǎng)幛幛筏蓼?。または、コントローラーなどのコンテキストで範(fàn)囲をテストする統(tǒng)合スタイルのテストをさらに作成することをお?jiǎng)幛幛筏蓼埂?<code>AppModelsScopesTeamScope</code> 個(gè)人的には、スコープが正しい制約を追加し、スコープが実際にクエリで使用されていることを確認(rèn)できるように、2つを混ぜるのが好きです。 </p> <h1 id="以前の例から始めましょう">以前の例から始めましょう</h1>および<hr> <p>>それらのテストを記述します。 2つの異なるテストを作成する必要があります(各範(fàn)囲ごとに1つ)</p> <ul> <li>テストチェック<code>published</code>範(fàn)囲は公開された記事のみを返します。 </li> <li>テストチェック<code>notPublished</code>範(fàn)囲は未発表の記事のみを返します。 </li> </ul> <p>これらのテストを見てから、何が行われているかを話し合いましょう:</p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; $publishedPosts = Article::query() ->where('published_at', '<', now()) ->get();</code></pre> <p>上記のテストファイルで確認(rèn)できます。最初に<code>setUp</code>メソッドでいくつかのデータを作成します。公開された2つの記事、1つの予定外の記事と1つのアレンジされた記事を作成しました。 </p> <p> <code>only_published_articles_are_returned</code> <code>published</code>範(fàn)囲をチェックして公開された記事のみを返すテスト(<code>only_not_published_articles_are_returned</code>)があります。また、未発表の記事のみを返すように<code>notPublished</code>範(fàn)囲をチェックするテスト(</p>)もあります。 <p> これを行うことにより、クエリスコープが予想どおり制約を適用していることを確認(rèn)できます。 </p> コントローラーのテスト範(fàn)囲<h1></h1> <hr> <p>私たちが述べたように、クエリの範(fàn)囲をテストする別の方法は、コントローラーで使用されるコンテキストでそれらをテストすることです。スコープの分離テストは、スコープがクエリに正しい制約を追加していることを主張するのに役立ちますが、実際には、スコープが期待どおりにアプリケーションで使用されているかどうかをテストしません。たとえば、コントローラーメソッドのクエリに<code>published</code>範(fàn)囲を追加することを忘れる場(chǎng)合があります。 </p> <p>これらのタイプのエラーは、コントローラーメソッドでスコープを使用するときに正しいデータを返すことを主張するテストを作成することでキャプチャできます。 </p> <p>マルチテナントのブログアプリケーションを持っている例を見て、記事をリストするコントローラーメソッドのテストを書きましょう。次のように、非常にシンプルなコントローラー方法があると仮定しましょう。 </p> <pre class="brush:php;toolbar:false"><code>use App\Models\Article; use Illuminate\Contracts\Database\Eloquent\Builder; $unpublishedPosts = Article::query() ->where(function (Builder $query): void { $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }) ->get();</code></pre> <p>モデルが<code>AppModelsArticle</code>を適用したと仮定します。 <code>AppModelsScopesTeamScope</code> </p>ユーザーチームに屬する記事のみを返すと斷言します。テストケースは次のようになる場(chǎng)合があります:<p> </p> 上記のテストでは、2つのチームを作成しています。次に、Team Oneに屬するユーザーを作成します。チーム1の3つの記事とチーム2の2つの記事を作成しました。次に、ユーザーとして行動(dòng)し、記事をリストするコントローラーメソッドにリクエストを行います。コントローラー方法は、チーム1に屬する3つの記事のみを返す必要があるため、記事IDを比較することでそれらの記事のみが返されると主張します。 <pre class="brush:php;toolbar:false"><code>declare(strict_types=1); namespace App\Models; use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; final class Article extends Model { public function scopePublished(Builder $query): Builder { return $query->where('published_at', '<', now()); } public function scopeNotPublished(Builder $query): Builder { return $query->where(function (Builder $query): Builder { return $query->whereNull('published_at') ->orWhere('published_at', '>', now()); }); } // ... }</code></pre> これは、コントローラー法で予想どおりにグローバルクエリスコープが使用されていることを確認(rèn)できることを意味します。 <p> </p>結(jié)論<p> </p> この記事では、ローカルクエリの範(fàn)囲とグローバルクエリの範(fàn)囲について學(xué)びました。それらの違い、それらを作成して使用する方法、およびそれらのテストを作成する方法を?qū)Wびました。 <h1> </h1> Laravelアプリケーションでクエリスコープを自信を持って使用できるようになることを願(yuàn)っています。 <hr>

以上がLaravelでクエリスコープをマスターすることを?qū)Wびますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語 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 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國(guó)語版

SublimeText3 中國(guó)語版

中國(guó)語版、とても使いやすい

ゼンドスタジオ 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コメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長(zhǎng)性や単純さを避けてください。 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é)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長(zhǎng)さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(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