ホームページ >php教程 >php手册 >php で大規模な Web サイトを作成する際の一連の問題 (yesky より)

php で大規模な Web サイトを作成する際の一連の問題 (yesky より)

WBOY
WBOYオリジナル
2016-06-21 09:12:041034ブラウズ

質問

PHP で大規模な Web サイトを作成する場合の一連の問題


PHP はその使いやすさから急速に普及していますが、使いやすいからといって使いこなせるわけではありません。実際、多くのプログラマーが WEB アプリケーション システムを簡単に構築するために PHP を使用しています。しかし、コードが保守しやすく、十分に堅牢で、十分に効率的で、十分に安全であるかどうかを注意深く検討した人はどれくらいいるでしょうか? これらは、PHP を使用して大規模な Web サイトを構築する場合に重要な要素になります。より小さな問題から始めて、いくつかの致命的な間違いに移りましょう。 3 つの部分に分かれています。
前編、マイナーエラー

1. Printf()、
この関数は主にデータのフォーマットと表示に使用されます。特定のデータの表示形式を変更したい場合にのみ使用してください。
たとえば、PI (3.1415926) の値をさまざまな精度で表示します。
/*
* Πの3つの顔
*/

printf ("Pi is: %.2f


",
printf ("Pi is also: %.3f

);
", M_PI);
printf ("Pi is also: %.4f


", M_PI);
?>

しかし、多くのプログラマーは、この関数をいくつかの変数値と関数の戻り値を表示するためにのみ使用します。 Printf() はデータを表示する前にデータを整形するため、速度が遅くなります。そのため、データを表示する場合にのみ print と echo を使用して高速化します。

2. セマンティック チェック
PHP は弱い型指定の言語であるため、使用する前に変数を定義する必要はありませんが、変数の型を知っておく必要があります。なぜなら、変数は実行時に実際には依然として特定の型に対応しており (さまざまな型を相互に自由に変換できます)、型のない変数は存在しないからです。 PHP がセマンティック エラーを検出できない可能性もありますが、変数の型の変更により、潜在的な問題が発生する可能性があります。注目に値するもう 1 つの問題は変数のスコープであり、これも潜在的な問題を引き起こす可能性があります。
PHP には次の基本変数があります:
ブール、リソース、整数、倍精度、文字列、配列、オブジェクト。

3.一時変数の使用
一時変数の乱用はプログラムの動作効率の低下につながります。一時変数をいつ使用するかは、次の 2 つの点に基づいて検討できます。
1. 変数が少なくとも 2 回使用されているかどうか。
2. この変数を使用するとプログラムの可読性が大幅に向上するかどうか。
上記のいずれも満たされない場合、この変数の使用は省略されます。例:
$tmp = date ("F d, h:i a"); /* つまり、1 月 3 日の午後 2 時 30 分 */
print $tmp?> に変更する必要があります。 :
print date ("F d, h:i a");
?>

別の例:

// string reverse_characters(string str)
// すべてを反転します
function reverse_characters ($str)
{
return implode ("", array_reverse (preg_split("//", $str)));
}

?>

// string reverse_characters(string str)
// 文字列内のすべての文字を反転します
function reverse_characters ($str)
{
$characters = preg_split ("// ", $str);
$characters = array_reverse ($characters);

return implode ("", $characters);
}

?>

4. クライアントコードとサーバーコードの分離
クライアント サーバー- PHP プログラムのサイド コードは、実際には HTML コードと PHP 言語コードを 1 つのファイルに混在させるため、このスタイルはプログラムのメンテナンスや再開発に非常に悪影響を及ぼし、開発には適していません。大規模なサイト。一般に、HTML ステートメントと PHP ステートメントを分離するには、次の 2 つの方法があります。
1.

index.php? などの専用 API を作成します。クライアント側

;

0">






サーバー側のコード



$dbh = mysql_connect ("localhost", "sh", "pass")
or die (sprintf ("MySQL [%s] に接続できません: %s",
mysql_errno ()、mysql_error ()));
@mysql_select_db ("メインサイト")
or die (sprintf ("データベース [%s] を選択できません: %s",
mysql_errno (), mysql_error ()));

$sth = @mysql_query ("SELECT * FROM site", $dbh)
or die (sprintf ("クエリ [%s] を実行できません: %s",
mysql_errno (), mysql_error ()));

$site_info = mysql_fetch_object ($sth);
{
global $site_info ;
print $site_info->header;

function print_body ()
{
print nl2br ($site_info->body)
}
{
global $ site_info;

$links = 爆発 ("
", $site_info->links);
$names = 爆発 ("
", $site_info->link_names); < count ($links);
{
$names[$i]


"; }
}
?>

このメソッドにより、プログラムがより単純に見え、実行が高速になります。

2. テンプレートを使用する方法
この方法では、上記と同じ機能を実現するには、次のコードを使用できます。 PAGE_TITLE%%



%%PAGE_LINKS%% %%PAGE_CONTENT%%< /td>



動的に生成されるコンテンツを置き換えるプレースホルダーを実際のコンテンツに置き換えます。この方法を使用すると、PHP を使用しないページ開発者でもテンプレート ファイルを変更できます。この方法の欠点は、テンプレートファイルを解釈する必要があるため、実行効率が高くないことです。同時に、実装もより複雑になります。

注: www.thewebmasters.net の FastTemplate クラスは、上記の機能を簡単に実装できます。

5. 古い関数を使用しないでください
PHP はフリー ソフトウェアとして急速に開発されており、次のような関数が多くあります。

while (1):
print "5" if ($idx++; = = 5):
break;
endif;
endwhile;

これはまだ使用できますが、明らかに効率的ではなく、将来のバージョンでは無効になり、プログラムが実行されなくなる可能性があります。したがって、常に最新の PHP マニュアルを参照して、どの関数が古くなっているのかを確認し、適時に修正する必要があります。







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