2012-08-01 12 views
6

私はモジュールをオンラインで学んでおり、jsのモジュールとPHPのクラスは非常に似ているようです。どちらのグループも、コーディングを理解しやすくするために一緒に機能します。関数は両方で宣言され、publicまたはprivateに宣言されます。それらはどのように使用されて似ているのですか?jsのモジュールとPHPのクラスの違いは何ですか?

+1

直接的な答えではありませんが、クラスは関数を分かりやすくするためのものではありません。主な目的は、抽象化(実装の詳細を隠す)、カプセル化(各オブジェクトの特定のアクションのみを許可する)、モジュール性(各クラスを移植性の高いものにする)です。 – Palladium

答えて

2

JavaScriptのモジュールは、カプセル化、プライベート状態、他のモジュールからの継承さえものような素晴らしい機能を提供します。 PHPのようにクラスのいくつかの機能を提供していますが、そうではありません。彼らはクラスをエミュレートするために、既存のJavascriptの関数に基づいて構築しようとします。すなわち、それらは、のようなルックアンドフィールに構築されたである。

JavaScriptのモジュールは、変数に割り当てられた無名関数のインスタンスです。したがって、コードは上から下に実行される関数のすべての機能を持っています。returnステートメント(PHPクラスでは、フィールド定義と代入から直接ステートメントを実行することはできません)、さらにはグローバル変数へのアクセス。一方、PHPでは、クラス、またはそのメソッドではなく、クラス自体にない変数にアクセスすることはできません。大域変数にアクセスするには、クラスメソッドまたは静的関数が明示的に変数global $aを呼び出す必要があります。 jsモジュールでは、すべてのグローバル変数にアクセスできますが、明示的にコードをインポートすることもできます。(function(a){})(imported);

もう1つの重要な問題はデータ抽象化です。 jsモジュールはフィールドのプライベートな状態を提供しますが、PHPのクラスはC++、java、pythonなどと同様に、プロパティに対するセキュリティを強化します。 abstract classおよびinterfaceというキーワードを使用してクラス・メソッドと属性のみが定義または構造化されていますが使用されていない基本クラスを使用できます。

PHPクラスには、クラスオブジェクトが初期化され、最後にオブジェクトを破棄するために使用されたときに呼び出されるコンストラクタとデストラクタもあります。一方、PHPでは、メソッド内の関数は、オブジェクト、クラス、または他の関数のいずれかによって呼び出されたときにのみ実行されます。

クラスには静的関数があり、クラスのオブジェクトを持たなくても呼び出すことができ、オブジェクトとは独立して実行できます。一方、jsではすべてがオブジェクトです。これは静的関数のポイントを打ち消す。

これらは似ています:どちらも継承を持ちます。既存のモジュールを新しいモジュールで拡張することができます。PHPではextendsを使用して親クラスから継承できます。彼らは両方とも、外部アクセスを妨げる私的なデータ状態を持っています。彼らはデータとメソッドをグループ化してパッケージ化しています。

関連する問題