ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター| 5インスピレーション(そして有用な)PHPスニペット

PHPマスター| 5インスピレーション(そして有用な)PHPスニペット

Joseph Gordon-Levitt
リリース: 2025-02-26 08:41:09
オリジナル
294 人が閲覧しました

PHP Master | 5 Inspiring (and Useful) PHP Snippets

インターネットには、「X PHPコードスニペット」タイプのさまざまな記事がたくさんあります。なぜ別の記事を書く必要があるのですか?その理由は簡単です。記事のコードスニペットのほとんどは光沢がありません。ランダムな文字列を生成するか、$_SERVER["REMOTE_ADDR"]を返してクライアントIPアドレスのようなフラグメントを取得することは、本当に楽しくて実用的ではありません。この記事では、PHPコードの5つの実用的で興味深いスニペットを共有し、その背後にあるインスピレーションを紹介します。うまくいけば、これらのクリエイティブコードスニペットが、毎日のプログラミングでより優れた、より創造的なコードを書くように促すことを願っています。

キーポイント

    この記事では、組み込み
  • 関数を使用してCSVデータを生成するなど、5つの実用的なPHPコードスニペットを紹介します。PSR-0標準を使用してクラスを自動的にロードし、fputcsv()関数を使用して固定長を解析します。データ、および単純なPHPクラスを使用して、HTMLテンプレートを実行し、unpack()を使用してCurlの代替として使用して、HTTP GETおよびPOSTリクエストを発行します。 file_get_contents
  • 著者は、PHPビルトイン関数を使用し、CSVデータの生成やコーディングの効率と創造性を改善できるクラスの自動ロードなどの一般的なタスクを実行するカスタムソリューションを作成することの重要性を強調しています。
  • 著者はまた、PHPコードスニペットを使用することの利点と潜在的なリスクについても議論しました。生産性を大幅に向上させ、コードの読み性を改善することはできるが、安全に使用し、安全な環境でテストし、信頼できるソースから使用する必要があることを示唆しています。潜在的な問題またはセキュリティリスク。

1 このようなコードがよく見られ、多次元配列データをCSVに変換しようとしています。

問題は、各要素が正しく逃げられないことであり、単一の値に引用符またはコンマを含めると、CSVデータのその後の解析にエラーが発生する可能性があります。組み込み

関数を使用するのが最善です。次のコードは、データ配列からCSV出力を構築するロジックをカプセル化します。タイトル列の使用を可能にするオプションのパラメーターと、CSVをブラウザに直接更新するか、文字列として出力を返すかどうかが含まれています。それについての巧妙なことは、機能が操作するために開いたファイルハンドルが必要であるため、

でストリームを使用することです。
<?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

fputcsv()fputcsv()関数を使用すると、CSVの生成はシンプルで信頼性が高くなります。

<?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2クラスを自動的にロードします

Autoloadクラスファイルは一般的ですが、さまざまなPHPフレームワークが提供する肥大化したヘビー級オートローダーが好きではないかもしれません。幸いなことに、独自の最小限のローダーを書いても、PHP Standards Working Groupが採用したPSR-0標準に従うことができます。この標準では、PSR-0互換性のあるオートローダーが提供する必要があるサポート機能(登録方法、構成オプションなど)は説明していません。クラスの定義を<vendor name>(<namespace>)モードで自動的に見つけることができる場合、PSR-0互換性があります。また、<vendor name>の親ディレクトリを指定しません。ほとんどのオートローダーによって実装される追加の「塗りつぶし」は、コードを介して場所を指定する必要がある場合に便利ですが、PHPに既にインクルードパスに既にディレクトリを使用している場合は必要ありません。

<?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ここでの巧妙なものは、渡された名前をそのコンポーネントに分割する正規表現です。アンダースコアには名前空間部品に特別な意味がないため、これらの部品を特定する必要があります。そのため、アンダースコアとバックスラッシュのブラインド交換が正しくありません。

$match[2] $match[1] 3を使用して、固定長データを解析します

XMLとJSONで満たされた今日の現代世界では、固定長の形式は絶滅していると思うかもしれません...しかし、あなたは間違っています。特定のログエントリ、Marc 21(参考文献情報)、Nacha(財務情報)など、大量の固定長データがまだあります。正直に言うと、私はまだ固定された長さのデータが特別な好みを持っています。

Cなどの言語では、メモリにロードされるとアクセスデータ構造と完全に整合するため、固定長データは比較的簡単に処理できます。しかし、一部の人々にとって、PHPなどの動的な言語で固定長データを処理することは、このメモリアクセスを不可能にします。したがって、このようなコードがよく表示されます 不快に感じるかもしれません。それは大丈夫です、私も私のアプリケーションでこのようなコードを使用したくありません!それは長く、インデックスはエラーになりやすいです。幸いなことに、より良い代替手段があります:

PHPマニュアルの

のドキュメントには、「指定された形式に従ってバイナリ文字列を配列に開梱する」と述べ、バイナリデータエスケープの使用の使用例を示しています。すぐに明白ではないかもしれないことは、形式の仕様 "a"は文字を意味するため(結局のところ、文字列は一連のビットとバイトではありませんか?)、この関数を使用して固定長の文字列を解析できることです。

<?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
を使用すると、上記の例は次のようにより優雅に書き直すことができます:

unpack() この場合、形式の文字列は一連のAのシリーズであり、特定のフィールドの文字数を指定する一連のAであり、取得したデータは最終配列に割り当てられ、スラッシュで区切られます。たとえば、

は6文字を解析し、

として提供します。 unpack()

4

PHPコミュニティでは、テンプレート化に関するコンセンサスはあまりありませんでした。私たちは皆、HTMLとPHPを分離することが望ましいことに同意しますが、SmartyやTwigなどのテンプレートライブラリを使用することの適用性に関する競合があります。一部の人々は、PHP自体がテンプレートエンジンであり、ライブラリの速度、構文などに反対することを指摘しています。他の人は、テンプレートシステムによって提供されるDSLを使用することで大きな利益を得ると主張しています。トレードオフの1つは、コードを簡潔に保つために、PHPで記述された非常に小さなクラスでHTMLをテンプレートすることです。

<?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

成熟したテンプレートエンジンではありません。これは、テンプレートとして指定されたファイルにアクセスできるキー/値データペアを収集する「バケツ」として機能するきちんとした補助クラスです。まず、ビュー内のTemplateクラスのインスタンスを作成し、ディレクトリ名を渡して後続のテンプレートファイルを見つけることを選択できます(関連するファイルをグループ化できます)。次に、テンプレートで満たされる値は、set()メソッドまたは裸の属性として提供されます。すべての値が指定されたら、テンプレートをレンダリングするためにout()メソッドを呼び出すことができます。

<?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

の例のmytemplate.phpファイルは次のようになるかもしれません:

<?php
spl_autoload_register(function ($classname) {
    $classname = ltrim($classname, "\");
    preg_match('/^(.+)?([^\]+)$/U', $classname, $match);
    $classname = str_replace("\", "/", $match[1])
        . str_replace(["\", "_"], "/", $match[2])
        . ".php";
    include_once $classname;
});
?>
ログイン後にコピー

テンプレートファイルでは、PHP関数の全範囲にアクセスして、必要に応じてフォーマット値、フィルター値などにアクセスできます。

2番目のオプションのパラメーターは、ブラウザに直接更新する代わりに、テンプレートコンテンツが文字列として返されることを指定できます。

out()

5 curl

の代替として使用します Curlは、さまざまなプロトコルを通信するための強力なライブラリです。それは本当に非常に強力であり、時にはそれをする他の方法がありません。タスクを達成するためにCurlによって公開される機能が明示的に必要な場合は、Curlを使用してください!ただし、PHPでの毎日のカールの使用のほとんどは、HTTPのGETおよびPOSTリクエストの作成を中心に展開します。これは、PHPビルトイン機能を使用して簡単に実行できます。

HTTPリクエストを発行するためにCurlに依存することに2つの問題があります。1)最も単純なトランザクションでもセットアップする多くのオプションがあり、2)ホスティングとインストールに応じて、利用可能である可能性がありますが、デフォルトでは有効になっていません。

および

は、バージョン4.3以降利用可能な2つのネイティブPHP関数です。併せて、彼らは通常、カールが実行するのと同じタイプの多くのリクエストを実行できます。 file_get_contents() stream_context_create()基本的なGet Requestsについては、

自体を使用できます:

file_get_contents() HTTPヘッダーを指定する必要があるリクエスト(取得または他のHTTPメソッド)の場合、特別なキー付き配列を

に渡して、コンテキストを
<?php
// 解析NACHA报头记录
$row = fread($fp, 94);
$header = array();
$header["type"] = substr($row, 0, 1);
$header["priority"] = substr($row, 1, 2);
$header["immDest"] = substr($row, 3, 10);
$header["immOrigin"] = substr($row, 13, 10);
$header["date"] = substr($row, 23, 6);
$header["time"] = substr($row, 29, 4);
$header["sequence"] = substr($row, 33, 1);
$header["size"] = substr($row, 34, 3);
$header["blockFactor"] = substr($row, 37, 2);
$header["format"] = substr($row, 39, 1);
$header["destName"] = substr($row, 40, 23);
$header["originName"] = substr($row, 63, 23);
$header["reference"] = substr($row, 86, 8);
print_r($header);
?>
ログイン後にコピー
に渡すことにより、コンテキストを作成できます。

stream_context_create() file_get_contents()上記の例は、投稿を介してファイルをアップロードするために必要な文字を示しています。コンテキスト配列はキー「メソッド」、「ヘッダー」、および「コンテンツ」を使用してトランザクションを指定します

<?php
// 解析NACHA报头记录
$row = fread($fp, 94);
$header = unpack("A1type/A2priority/A10immDest/A10immOrigin/"
    . "A6date/A4time/A1sequence/A3size/A2blockFactor/A1format/"
    . "A23destName/A23originName/A8reference", $row);
print_r($header);
?>
ログイン後にコピー
口。

複雑なリクエスト(ファイルアップロードなど)にfile_get_contents()を使用する場合、最初に模擬Webフォームを作成し、FirefoxまたはFireBugが有効になった同様のツールを実行してから、リクエストに含まれるものが少し助けになる可能性があります。そこから、重要なヘッダー要素を含めることができます。

概要

この記事で紹介されたコードスニペットが興味深いと思うことを願っています。彼らは、創造的な問題解決と、新しい効果のためにPHPの組み込み機能を使用することを紹介します。私はあなたがそれらが便利で刺激的なものだと思うことを願っています。あなたがあなた自身の刺激的なコードスニペットを持っている場合は、以下のコメントでそれをお気軽に共有してください。

(フォトリアからの写真)

(PHPコードスニペットに関するFAQ)

(FAQパーツは、元のFAQパーツのコンテンツがコードスニペット自体とはほとんど関係がなく、補足的な説明であるため、ここでは省略されています。実際のニーズに応じて自分で追加または変更できます。)

以上がPHPマスター| 5インスピレーション(そして有用な)PHPスニペットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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