PHP の使用上のヒント

Jun 23, 2016 pm 02:31 PM
PHPの使い方のヒント

=============================================== == ========
[size=+2] 静的に呼び出されるメンバーは静的として定義する必要があります (PHP5 のみ)
ヒント: PHP 5 では静的メンバーの概念が導入されており、その関数は関数と同じですPHP 4 の内部静的変数 同じですが、前者はクラスのメンバーとして使用されます。静的変数は、Ruby のクラス変数に似ています。クラスのすべてのインスタンスは同じ静的変数を共有します。
引用:
// dZ902 による CU の PHP コードの強調表示
class foo {
function bar() {
echo 'foobar'
}
}
$foo = new foo;
$foo->bar();
// 静的方法
foo::bar();
?>
非静的メンバーの静的呼び出しは、静的メンバーの静的呼び出しよりも 50 ~ 60% 遅くなります。主な理由は、前者は E_STRICT 警告を生成し、内部で変換する必要があるためです。
[size=+2] クラス定数を使用します (PHP5 のみ)
ヒント: C++ の const に似た PHP 5 の新機能。
クラス定数を使用する利点は次のとおりです:
- コンパイル時の解析、余分なオーバーヘッドなし
- ハッシュ テーブルが小さいため、内部検索が高速になります
- クラス定数は特定の「名前空間」にのみ存在するため、ハッシュ名は短い
- コードがクリーンになり、デバッグが容易になります
[size=+2] (一時的に) require/include_once は使用しないでください
require/include_once は呼び出されるたびにターゲット ファイルを開きます。
- 絶対パスが使用されている場合、PHP 5.2/6.0 にはこの問題はありません
- APC キャッシュ システムの新しいバージョンでは、この問題が解決されました
ファイル I/O の増加 => 効率の低下
必要に応じて、ファイルが/include が必要です。
[size=+2]意味のない関数を呼び出さない
対応する定数がある場合は関数を使用しないでください。
引用:
// dZ902 による CU の PHP コードの強調表示
php_uname('s') == PHP_OS;
php_sapi_name() == PHP_SAPI;
あまり使用していませんが、効率向上は約3500%です。
[size=+2] 最速の Win32 チェック
引用:
// dZ902 による CU 用の 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 を実行するには、配列の代わりに文字列を使用します:
QUOTE:
// dZ902 による CU の PHP コードの強調表示
$addr = strtr($addr, "abcd", "efgh") // 良い
; $addr = strtr($addr, array('a' => 'e',
// ...
)); // 悪い
?> 効率改善: 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 を入れないでください
ヒント: 私の個人的なアプローチ
引用:
// dZ902 による CU の PHP コードの強調表示
for ($i = 0, $max = count($array);$i < $max; ++$i); ;
以下と比較した効率の向上:
- count 50%
- strlen 75%
[size=+2]短いコードは必ずしも高速であるとは限りません
QUOTE:
// dZ902 による CU の PHP コードの強調表示
/ / 最長
if ($a == $b) {
$str .= $a;
} else {
$str .= $b;
// より長い
if ($a == $b) {
$str .= $a;
$str .= $b;
// short
$str .= ($a == $b ? $a : $b?>早く考えますか?
効率の比較:
- 最長: 4.27
- 最長: 4.43
- 最短: 4.76
信じられない?もう 1 つ:
引用:
// dZ902 による CU の PHP コード ハイライト
// オリジナル
$d = dir('.')
while (($entry = $d->read ( )) !== false) {
if ($entry == '.' || $entry == '..') {
Continue;
}
// 対
glob('./*' ) ;
// (. と .. を含む)
?> どちらが速いですか?
効率の比較:
- オリジナル: 3.37
- glob: 6.28
- scandir: 3.42
- OO なしのオリジナル: 3.14
- SPL (PHP5): 3.95
ボイスオーバー: このことから、オブジェクトがPHP5 の効率性は大幅に向上していますが、その効率性は純粋な関数の効率性とそれほど変わりません。
[size=+2] PHP ファイルへのアクセス効率を向上
他の PHP ファイルを含める必要がある場合は、フルパス、または変換しやすい相対パスを使用してください。
引用:
// dZ902 による CU の PHP コードの強調表示
include 'file.php'; // 悪いアプローチ
include './file.php' // 良い
include '/path/to /file.php'; // 理想的な
?>[size=+2] すべてを最大限に活用しましょう
関数を実装する前に、PHP にこの関数があるかどうかを確認する必要があります。もっと簡単な実装はありますか?
引用:
// dZ902 による CU の PHP コードの強調表示
$filename = "./somepic.gif";
$handle = fopen($filename, "rb"); $handle, filesize($filename));
fclose($handle);
// より単純な
?> 参照について
引用により次のことが可能になります:
- 複雑な構造化データへのアクセスを簡素化します
- メモリ使用量を最適化します
引用:
// dZ902 による CU の PHP コードの強調表示
$a['b']['c'] = array ();
// アクセスごとに 2 つの余分なハッシュ検索が遅い
for ($i = 0; $i < 5; ++$i)
$a['b']['c'][$i ] = $i;
// より高速な参照ベースのアプローチ
$ref =& $a['b']['c'];
for ($i = 0; $i <5; ++$i)
$ ref[$i] = $i?>
引用:
// dZ902 による CU の強調表示
$a = 'large string';
function a( $str)
{
return $str.'something';
// より効率的な解決策
function a(&$str)
{
$str .= 'something'
}
?> ============================================
[サイズ= +2 ] 参考資料
http://ilia.ws
Ilia の個人 Web サイト、ブログ、彼が参加した開発や出版物の一部へのリンクなど。
http://ez.no
eZ コンポーネント公式ウェブサイト、eZ comp は効率性を使命とする PHP5 用のオープンソース ユニバーサル ライブラリであり、Ilia も開発に参加しました。
http://phparch.com
php|architect、優れた php 出版社/トレーニング組織。お金がない場合、または購入できない場合は、オンラインで入手できる古典的な海賊版がたくさんあります。
http://talks.php.net
PHPカンファレンスでの講演集はまだあまり充実していませんが、食事や睡眠を忘れるほどの充実した内容なので、眠い朝にオススメです。または昼食後に注意深く勉強しないと、食べることも寝ることも忘れてしまいます。



投稿: http://hi.baidu.com/jackywdx/blog/item/e2ae00d96f441e2810df9b78.html

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

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

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

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' =>

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

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

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

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

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

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles