これはよく尋ねられる質問であり、人々は Linux か Windows かという議論に簡単に誘導される可能性があります。このような議論は、競合する Web 開発テクノロジを並べて分析することがいかに難しいかを反映しており、同等のオペレーティング システムに対する開発者の異なる意見によってさらに困難が増します。
したがって、このような議論に参加し続ける代わりに、特定の Web 開発環境および運用環境における各テクノロジーの利点を検討したほうがよいでしょう。 ASP は ASP.NET よりも PHP に似ていますが、それでも ASP.NET について説明したいと思います。その理由は、開発者がよく ASP と混同するためであり、Microsoft の取り組みにより、将来的には ASP.NET が ASP に完全に置き換わることになります。
基本理論 - 機能の概要
PHP - ハイパーテキスト プリプロセッサ
PHP は、構文が C 言語に非常に似ているオープンソースのサーバーサイド スクリプト言語です。 PHP は元々、Linux ベースの Apache Web サーバー システムで使用するために設計されましたが、現在ではあらゆるオペレーティング システムに移植されており、標準的な Web サーバー ソフトウェアと互換性があります。このことから、PHP の 3 つの主な利点も導き出すことができます。まず第一に、これはクロスプラットフォーム テクノロジであるため、PHP アプリケーションを簡単に移植できます。もちろん、これは、ベンダー固有のデータベースなど、統合する必要がある追加コンポーネントによって異なります。このような移植性は別の利点ももたらします。つまり、ほとんどの Web ホスティング プロバイダーが PHP をサポートしているため、必要に応じてホストを変更するのが非常に便利です。
2 番目のポイントは、PHP は C プログラミング言語と多くの類似点があるため、関連する構文に精通している開発者にとって PHP は非常に使いやすいです。この構文は Java、JavaScript、Perl でも使用されています。第三に、PHP はオープンソース製品であるため、今後も急速に開発が続けられます。さらに重要なのは、関連する脆弱性パッチが定期的にコア ライブラリに無料で埋め込まれることです。
さらに、特定のプログラミング ニーズの下では、PHP は開発者にとってより魅力的なものになります。まず、PHP には、画像や PDF ドキュメントの直接作成と関連操作をサポートするライブラリが組み込まれています。これは、アプリケーションがアンチエイリアス処理されたテキストを含む動的に作成されたメニュー画像を呼び出す場合、またはページを Acrobat 形式でエクスポートする必要がある場合、PHP がそのような問題を解決する理想的なテクノロジーであることを意味します。これらの機能は理論的には PHP と競合する他のテクノロジを通じて取得できますが、他のテクノロジでは、多くの場合、それらの機能を実現するためにサードパーティのカスタム コンポーネントのインストールが必要になります。
PHP がサーバー スクリプトの作成に最適な選択肢であるもう 1 つの理由は、mySOL データベースや Postgres データベースへの接続などの問題に対処する際のパフォーマンスが優れていることです。 mySOL または Postgres データベースへのアクセスは、ASP テクノロジと ODBC 接続を通じて実現できますが、多くの場合、システム管理者による追加の構成が必要になります。幸いなことに、この制限は ASP.NET で修正されており、MS SQL Server を使用する場合と同様に直接データベース接続を確立する必要がある場合は、mySQL を通じてデータを提供できます。
ASP - 動的サービス ページ (アクティブ サーバー ページ)
Microsoft は ASP を Windows NT Server 4 に導入し、それを IIS Web サーバー下の動的 Web アプリケーションのデフォルト プラットフォームとして使用しました。 ASP は、Visual Basic 言語のフォークである VBScript を使用するため、Microsoft の IDE、Visual Studio でのプログラミングに慣れている開発者の間ですぐに人気になりました。スクリプト言語の継続的な開発により、研究者はテクノロジー競争の仲間入りをするために ASP に多くの機能を導入してきませんでした。したがって、PHP で見られる画像操作などの機能は ASP には統合されていません。ただし、開発者は、サードパーティの COM オブジェクトを DLL ファイルの形式で作成 (またはインストール) して、同様の作業を完了することができます。この方法でコードを作成すると、サーバー自体が許可するあらゆるアクションを実行できます。もちろん、欠点は、開発者がこれらのサービスを構成するためにデスクトップ システムと対話する必要があることです。これは Web 開発者にとっては必要のない機能です。
ASP の利点は、企業環境のほぼどこにでも Microsoft サーバーが存在することです。さらに、MS SQL Server にも幅広い市場があり、ASP を十分にサポートしています (当然のことですが)。 ODBC はあらゆるデータ ソースと互換性があるにもかかわらず、SQL Server とファイル DSN アクセスはコード レベルで実装できます。
ASP.NET
ASP と PHP のどちらを選択するかについての議論は、.NET の台頭によりますます不要なものになってきています。実際、何年にもわたる議論は、Java テクノロジを選択するか、.NET テクノロジ (またはその両方) を選択するかという答えで最終的に終わります。 ASP と ASP.NET の間の唯一の接続は、両方とも VBScript を使用することです。 .NET だけでも、VBScript とその他約 20 の言語を使用できます。
ASP と PHP にとって、ASP.NET が別の言語とみなされている理由は、まったく異なるアーキテクチャ上で動作するためです。前者は翻訳スクリプト言語ですが、.NET はコンパイルされたフレームワークです。これは、まず Web ページの実行速度が大幅に向上することを意味します。同時に、ソース コードはより安全で堅牢になります。さらに、ASP.NET は Web プログラミングに新しい概念、つまり「分離コード ページ」という概念をもたらします。コードビハインドの考え方によれば、各 HTML ページは、独自にコンパイルされたプログラム命令によって駆動されます。その結果、HTML (プレゼンテーション層) はアプリケーションのビジネス ロジックから大きく切り離されています。このような分離は PHP や ASP を通じても実現できますが、ASP.NET のような独自のテクノロジの主要な部分ではありません。
ASP.NET のもう 1 つの利点は、XML および Web サービスのさまざまなサポートが完全に統合されていることです。 .NET では、非常に広範なセキュリティおよび暗号化システム ライブラリが利用可能であり、金融機関やエンタープライズ データ アプリケーションに特に役立ちます。落とし穴という点では、経験豊富な開発者でも .NET の使用が混乱する可能性があります。開発者が使用するプログラミング言語に精通しているかどうかに関係なく、Web 開発者にとって、プログラミング パラダイムの難易度が大幅に上昇することが、ASP.NET への統合の大きな障害となる可能性があります。ホスティングは、ASP.NET アプリケーションにとっても問題です。ASP.NET は、ASP や PHP ほどホスティング プロバイダーによる広範なサポートを受けておらず、同じレベルで競合することはできません。
実践 - 言語比較
変数宣言
VBScript (ASP と ASP.NET はどちらも VBScript を使用します) では、使用前に変数を宣言する必要はありませんが、技術ドキュメントではこれが推奨されていることがよくあります。 Option Explicit 宣言を使用すると、開発者はプログラムで変数宣言を強制できます。 PHP では変数を宣言できますが、開発者にこれを強制する方法はありません。実際、変数は使用前に自動的に宣言されます。 PHP 変数の利点は、変数を他の変数への参照として設定できることですが、VBScript では変数は値によってのみ定義できることです。
<% ' VBScript Example Option Explicit myVar = 1 myOtherVar = myVar myVar = 2 ' myResult will be 3 myResult = myVar + myOtherVar %>
<? // PHP Example $myVar = 1; 'Use the ampersand to make a reference $myOtherVar = &$myVar; $myVar = 2; // $myResult will be 4 $myResult = $myVar + $myOtherVar; ?>
変数コレクション
PHP と ASP でフォーム変数とクエリ文字列変数を使用する方法は非常に似ています。フォーム変数やクエリ文字列変数のコレクションにアクセスするには、名前や配列など、さまざまな方法があります。 ASP.NET では、特にフォーム フィールドの場合、状況が大きく異なります。送信されたフォーム変数を盲目的に検索するのとは異なり、分離コードは HTML ページ内のすべてのフォーム フィールドを認識でき、既知のイベントの実行に基づいてこれらのフォーム フィールドの値のチェックをトリガーできます。これらのイベントの 1 つは「ポストバック」で、ユーザーがフォームを送信したときに発生します。他のイベントはクライアント側プログラムであり、JavaScript 経由でトリガーできます。 ASP.NET では、この 2 つに定性的な違いはありません。
<% ' ASP Example myFormVal = request.form("myInputField") myQSval = request.querystring("myQSitem") myVal = request.item("myFormOrQSitem") %>
<? // PHP 4.1+ Example $myFormVal = $_POST['myInputField']; $myQSval = $_REQUEST['myQSitem']; // PHP 3+ Example $myFormVal = $HTTP_POST_VARS['myInputField']; // If register_globals = on $myVal = $myFormOrQSitem; ?>
<!-- ASP.NET example --> <html> <script language="VB" runat=server> Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Message.Text = "Hello " & Name.Text End Sub </script> <body> <form action="action.aspx" method="post" runat="server"> Name: <asp:textbox id="Name" runat="server"/> <asp:button text="OK" OnClick="SubmitBtn_Click" runat="server"/> <asp:label id="Message" runat="server"/> </form> </body> </html>
文字列の連結
PHP はこの問題に十分な注意を払っているようで、通常の連結の問題を考慮することなく変数を文字列に挿入することができます。 ASP.NET ではプロセス全体がより面倒になり、StringBuilder クラスの助けが必要になりますが、ASP.NET ははるかに高速に実行されます。
<? // PHP Example $link = mysql_connect("host", "user", "password")or die("mysql_error()); mysql_select_db("database") or die("Could not select database"); $query = "SELECT * FROM Table"; $result = mysql_query($query) or die(mysql_error()); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { //do something } } ?>
データベースへの接続
データベース接続の問題については、各テクノロジーが独自の優れた標準化を示しています。まず、いずれの場合もデータベースへの接続が確立されます。 PHP の場合、データベースは作成後に選択されます (ASP および ASP.NET の場合、これは接続フェーズ中に行われます)。その後、クエリが構築されてデータベースに渡されますが、結果としてレコードが返される場合と返されない場合があります。
ASP.NET は本質的にオブジェクト指向であり、PHP や ASP と比べて複雑なエラー処理をサポートしているため、単純なタスクを完了するためにより多くのコードを記述する必要がある場合があります。ただし、利点という点では、特に組み込みのデータグリッド コントロールを使用して HTML 出力を自動的に作成する場合、ASP.NET は PHP や ASP よりもデータ表示機能を完了するのに必要なコードがはるかに少なくなります。
<% 'ASP Example Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "Driver={SQL Server};Server=MyServerName;" & _ "Database=myDatabaseName;Uid=;Pwd=" const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.OpenstrSQL, objConn Do While Not objRS.EOF 'do something objRS.MoveNext Loop %>
' ASP.NET の例
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ") Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn) MyConn.Open() Dim dr As SqlDataReader = MyComm.ExecuteReader() MyDataGrid.DataSource = dr MyDataGrid.DataBind() MyConn.Close() End Sub </script> <body> <ASP:DataGrid id="MyDataGrid" runat="server" Width="600" BackColor="#FFFFFF" BorderColor="#000000" ShowFooter="false" CellPadding=2 CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#EEEEEE" EnableViewState="false" /> </body> </html>
結論
ASP、PHP、または ASP.NET の選択は、最終的にはアプリケーションのニーズと、アプリケーションが実行されているシステム環境によって決まります。開発者が同様のプログラミング言語またはパラダイムに精通しているかどうかも、選択の要因となる可能性があります。完璧な方法はなく、どのテクニックが最適な選択であるかは個々の状況によって決まることに注意してください。たとえば、ASP.NET を使用して Windows サーバー用の単一ページのフォーム メール アプリケーションを作成するのはやりすぎに思えるかもしれませんが、ASP にとっては優れたアプリケーション環境です。 Web サイトが Linux Apache サーバー上の mySQL データベースに接続する必要がある場合、ASP または ASP.NET の使用では不十分です。開発者がユーザーの個別の要件を事前に詳細に検討していれば、これらの競合テクノロジーの中から選択するプロセスは、開発者にとって戦いの半分になります。
上記は、動的 Web サイトを開発するために PHP、ASP、または ASP.NET を選択する内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。