ホームページ バックエンド開発 PHPチュートリアル PHPサイト制作のヒントまとめ!

PHPサイト制作のヒントまとめ!

Jun 20, 2016 pm 01:01 PM

静的呼び出しメンバーは静的として定義する必要があります (PHP5 のみ)

ヒント: PHP 5 では、静的メンバーの概念が導入されています。静的メンバーは、PHP 4 の関数内の静的変数と同じ機能を持ちますが、前者はクラスのメンバーとして使用されます。静的変数は、Ruby のクラス変数に似ています。クラスのすべてのインスタンスは同じ静的変数を共有します。

引用:

// PHP CODE Highliting for CU by dZ902
<?php
class foo {
    function bar() {
        echo 'foobar';
    }
}

$foo = new foo;

// instance way

$foo->bar();

// static way

foo::bar();
?>
ログイン後にコピー



非静的メンバーを静的に呼び出す効率は、静的メンバーを静的に呼び出すよりも 50 ~ 60% 遅くなります。主な理由は、前者は E_STRICT 警告を生成し、内部で変換する必要があるためです。

[size=+2]クラス定数を使用する (PHP5 のみ)

ヒント: PHP 5 の新機能。C++ の const に似ています。

クラス定数を使用する利点は次のとおりです:

- コンパイル時の解析、余分なオーバーヘッドなし
- ハッシュ テーブルが小さいため、内部ルックアップが高速になります
- クラス定数は特定の「名前空間」にのみ存在するため、ハッシュ名は短くなります
- コードがよりクリーンになり、デバッグが容易になります

[size=+2](一時的に) require/include_once は使用しないでください

require/include_once は呼び出されるたびにターゲット ファイルを開きます。

- 絶対パスを使用する場合、PHP 5.2/6.0 ではこの問題は発生しません
- APC キャッシュ システムの新しいバージョンは、この問題を解決しました

ファイル I/O の増加 => 効率の低下

必要に応じて、ファイルが必須/インクルードされているかどうかを自分で確認できます。

[size=+2]意味のない関数を呼び出さない

対応する定数がある場合は関数を使用しないでください。

引用:

// PHP CODE Highliting for CU by dZ902

<?php
php_uname('s') == PHP_OS;
php_version() == PHP_VERSION;
php_sapi_name() == PHP_SAPI;
?>
ログイン後にコピー


あまり使用していませんが、効率向上は約3500%です。

[size=+2]最速の Win32 チェック

引用:

// PHP CODE Highliting for CU by dZ902

<?php
$is_win = DIRECTORY_SEPARATOR == '//';
?>
ログイン後にコピー



- 関数は必要ありません
- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler...ユニバーサル
- いつでも利用可能

[size=+2]時間の問題 (PHP>5.1.0 のみ)

ソフトウェアの現在時刻をどのようにして知ることができますか?シンプルに、「time() time() もう一度、あなたは私に尋ねます...」。

ただし、この関数は常に呼び出されるため、処理が遅くなります。

さて、$_SERVER['REQUEST_TIME'] を使用します。関数を呼び出す必要はありません。再度保存してください。

[size=+2]PCRE を高速化

- 保存する必要のない結果については、() を使用せず、常に (?
を使用してください)
このようにして、PHP は一致するコンテンツにメモリを割り当てる必要がなくなり、コストが節約されます。効率が約15%向上します。

・ 正規表現が使用できる場合は、マニュアルの「文字列関数」をよく読んで解析してください。見逃している便利な機能はありますか?

例:

strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()
ログイン後にコピー



[size=+2]strtr を加速します

変換する必要があるのが 1 文字だけの場合は、配列の代わりに文字列を使用して strtr を実行します:

引用:

// PHP CODE Highliting for CU by dZ902

<?php
$addr = strtr($addr, "abcd", "efgh"); // good
$addr = strtr($addr, array('a' => 'e',
                           // ...
                           )); // bad
?>
ログイン後にコピー



効率の向上: 10 倍。

[size=+2]不必要な置換を行わないでください

str_replace は、置換を行わない場合でも引数にメモリを割り当てます。とても遅いです!解決策:

- strpos を使用して最初に (非常に高速に) 検索し、置換が必要かどうかを確認し、必要な場合は
を置換します。
効率:

- 交換が必要な場合: 効率はほぼ同等で、差は約 0.1% です。
- 置換が必要ない場合: strpos を使用すると 200% 高速になります。

[size=+2]邪悪な @ オペレーター

@ 演算子を乱用しないでください。 @ は単純そうに見えますが、実際には舞台裏で多くの操作が行われています。 @ を使用した場合と使用しない場合の効率の差は 3 倍です。

特にループ内で @ を使用しないでください。5 ループのテストでは、最初に error_reporting(0) を使用してエラーをオフにし、ループが完了してからオンにすると、@ を使用するよりも高速になります。

[size=+2]strncmp を上手に活用しましょう

「最初の n 文字」が同じかどうかを比較する必要がある場合は、substr/strto lower の代わりに strncmp/strncasecmp を使用し、PCRE は言うまでもなく、ereg については決して言及しないでください。 strncmp/strncasecmp は (それほどではありませんが) 最も効率的です。

[size=+2]substr_compare は注意して使用してください (PHP5 のみ)

上記のロジックによれば、substr_compare は最初とその後で substr よりも高速になるはずです。以下の場合を除き、答えはノーです。

- 大文字と小文字を区別しない比較
- より大きな文字列を比較

[size=+2]文字列の代わりに定数を使用しないでください

理由:

- ハッシュ テーブルを 2 回クエリする必要があります
- 定数名は小文字に変換する必要があります (2 番目のクエリを実行するとき)
- E_NOTICE 警告を生成
- 一時的な文字列が作成されます

効率の差: 700%。

[size=+2]for ループの条件文に count/strlen/sizeof を入れないでください

ヒント: 私の個人的なアプローチ

引用:

// PHP CODE Highliting for CU by dZ902

<?php
for ($i = 0, $max = count($array);$i < $max; ++$i);
?>
ログイン後にコピー



以下と比較した効率の向上:

- カウント 50%
- ストレン 75%

[size=+2]短いコードは必ずしも速いとは限りません

引用:

// PHP CODE Highliting for CU by dZ902

<?php
// longest
if ($a == $b) {
    $str .= $a;
} else {
    $str .= $b;
}

// longer
if ($a == $b) {
    $str .= $a;
}
$str .= $b;

// short
$str .= ($a == $b ? $a : $b);
?>
ログイン後にコピー



どちらが速いと思いますか?

効率の比較:

- 最長: 4.27
- ロング: 4.43
- ショート: 4.76

信じられない?もう 1 つあります:

引用:

// PHP CODE Highliting for CU by dZ902

<?php
// original
$d = dir('.');
while (($entry = $d->read()) !== false) {
    if ($entry == '.' || $entry == '..') {
        continue;
    }
}

// versus
glob('./*');

// versus (include . and ..)
scandir('.');
?>
ログイン後にコピー



哪个快?

效率比较:

- original: 3.37
- glob: 6.28
- scandir: 3.42
- original without OO: 3.14
- SPL (PHP5): 3.95

画外音:从此也可以看出来 PHP5 的面向对象效率提高了很多,效率已经和纯函数差得不太多了。

[size=+2]提高 PHP 文件访问效率

需要包含其他 PHP 文件的时候,使用完整路径,或者容易转换的相对路径。

QUOTE:

// PHP CODE Highliting for CU by dZ902

<?php

include 'file.php'; // bad approach

incldue './file.php'; // good

include '/path/to/file.php'; // ideal

?>
ログイン後にコピー



[size=+2]物尽其用

PHP 有很多扩展和函数可用,在实现一个功能的之前,应该看看 PHP 是否有了这个功能?是否有更简单的实现?

QUOTE:

// PHP CODE Highliting for CU by dZ902

<?php
$filename = "./somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

// vs. much simpler

file_get_contents('./somepic.gif');
?>
ログイン後にコピー



[size=+2]关于PHP引用的技巧

引用可以:

- 简化对复杂结构数据的访问
- 优化内存使用

QUOTE:

// PHP CODE Highliting for CU by dZ902

<?php
$a['b']['c'] = array();

// slow 2 extra hash lookups per access
for ($i = 0; $i < 5; ++$i)
    $a['b']['c'][$i] = $i;

// much faster reference based approach
$ref =& $a['b']['c'];
for ($i = 0; $i < 5; ++$i)
    $ref[$i] = $i;
?>
ログイン後にコピー



QUOTE:

// PHP CODE Highliting for CU by dZ902

<?php
$a = 'large string';

// memory intensive approach
function a($str)
{
    return $str.'something';
}

// more efficient solution
function a(&$str)
{
    $str .= 'something';
}
?>
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles