私はオンラインでモジュールについて学んでいますが、jsのモジュールとphpのクラスは非常に似ているようです。コーディングを理解しやすくするために、両方のグループが一緒に機能します。関数は両方で宣言でき、パブリックまたはプライベートにすることができます。それらはどのように使用され、どのように異なっていますか?
1 に答える
Javascriptのモジュールは、カプセル化、プライベート状態、さらには他のモジュールからの継承など、いくつかの優れた機能を提供します。PHPのように、クラスの機能の一部を提供しますが、そうではありません。彼らは、既存のJavascript機能に基づいてクラスをエミュレートしようとします。そのため、混乱が生じます。つまり、クラスのように見えるように構築されています。
Javascriptのモジュールは、変数に割り当てられた無名関数のインスタンスです。したがって、コードが上から下に実行される関数のすべての機能を備えており、returnステートメントを使用することもあります(PHPクラスでは、フィールドの定義と割り当て以外にステートメントを直接実行することはできません)。グローバルにアクセスすることもできます。変数。一方、PHPでは、クラス、つまりそのメソッドは、クラス自体にない変数にアクセスできません。グローバル変数にアクセスするには、クラスメソッドまたは静的関数が変数を明示的に呼び出す必要があります。つまり、変数global $a
をインポートする必要があります。jsモジュールでは、すべてのグローバル変数にアクセスできますが、より適切なコードのために明示的にインポートすることを選択する場合もあります(function(a){})(imported);
もう1つの重要な問題は、データの抽象化です。jsモジュールはフィールドにプライベート状態を提供しますが、PHPのクラスは、C ++、java、pythonなどと同様に、プロパティのセキュリティを強化します。abstract class
これにより、 andキーワードを使用した基本クラスが可能になり、interface
クラスのメソッドと属性は定義または構造化されただけで、使用されません。
PHPクラスには、クラスオブジェクトが初期化され、最後にオブジェクトを破棄するために使用されるときに呼び出されるコンストラクタとデストラクタもあります。確かに、必要なときに実行する関数をモジュールに作成できます。一方、PHPでは、メソッド内の関数は、オブジェクト、クラス、またはその他の関数のいずれかによって呼び出された場合にのみ実行されます。
クラスには静的関数があり、これらはクラスのオブジェクトがなくても呼び出すことができ、オブジェクトから独立して実行できます。一方、jsでは、すべてがオブジェクトです。これは静的関数のポイントを打ち負かします。
これらは次の点で類似しています。どちらにも継承があり、既存のモジュールを新しいモジュールで拡張できます。PHPではextends
、親クラスから継承するために使用できます。どちらも外部アクセスを防ぐプライベートデータ状態を持っており、データとメソッドをグループ化してパッケージ化し、適切に使用するとどちらも素晴らしいものになります。