1

PHPを学び始めたばかりです。初心者の質問で申し訳ありませんが、メソッドがどのように機能するのか疑問に思っています。たとえば、文字列の先頭にある空白を削除したい場合。Ruby では、次のように呼び出します。

string.strip!

しかし、PHPでは、次のようなことをしなければなりません:

trim(string);

明らかに、Ruby 版の方が (オブジェクト指向設計の点で) より洗練されていますが、PHP や Java などの他の言語ではどのように機能するのか疑問に思っています。このように関数/メソッドを設計するための名前はありますか(PHPで)? また、これらのメソッドはどこで定義され、どこからでもアクセスできるのはなぜですか? よろしくお願いします!

4

2 に答える 2

7

ここには、オブジェクト指向プログラミング(OOP) と手続き型プログラミングの 2 つの異なるパラダイムがあります。

OOP では、関数はデータのコンテキストで定義され、クラスによってカプセル化されます。このような関数は通常、メソッドと呼ばれます。メソッドがオブジェクト (クラスのインスタンスなど) で呼び出されると、本質的にそのオブジェクトの状態にアクセスできます。したがって、あなたの例では、strip呼び出されている文字列が既にわかっているため、追加の引数は必要ありません。関数が特定のオブジェクトまたはデータ セットに対して自然に動作する場合 (strip文字列に対する動作など) は常に、この方法でインスタンス メソッドとして定義するのが賢明です。

手続き型プログラミングでは、関数は独立したデータ構造 (クラス) として定義され、処理するデータを明示的に渡す必要があります。実際には、このアプローチの方が自然な場合もあります。たとえば、print何らかの入力を などに出力する関数はstdout、特定のオブジェクトやデータに自然に関連付けられているわけではありません。

現代のほとんどの言語には、非常に用途が広く強力なプログラミング パラダイムであるため、OO 機能が組み込まれています。Java や C# などの言語では、すべてのコードをオブジェクト指向スタイルで記述することが推奨されています。これらの言語では、文字列や浮動小数点などの基本的なデータ型でさえ、実際にはオブジェクトであり、独自のメソッドと状態を持っています。これは特に C# に当てはまります。C# では、すべてのSystem.Object型が(evenintおよび)から最終的にdouble継承され、それによって定義されたすべての共通メソッドを継承します。これを統一型階層と呼びます。

一方、PHP には、OOP と手続き型の機能が奇妙に混在しています。OOP は手続き型言語として誕生し、OOP はバージョン 3 でのみ導入されました (非常に初歩的な意味でのみ)。PHP5 の時点で、OOP は比較的適切にサポートされていますが、その標準ライブラリのほとんどは、関連する状態/データが引数として渡されることを期待する関数の緩やかなコレクションとして、まだ手続き的に実装されています。ただし、OOP ライブラリはより一般的になりつつあります (例: などmysqli)。

于 2012-10-21T13:37:46.540 に答える
2

本質的に、インスタンスメソッドとクラス/静的メソッドの違いを見ています。インスタンス メソッドは、クラスの特定のインスタンスで呼び出され、そのインスタンスの内部状態にアクセスできます。クラス/静的メソッドはありません。


「PHP と ... Java でどのように機能するか」という質問で、あなたが何を探しているのかわかりません。インスタンス メソッドと非インスタンス メソッドに関しては、Ruby、PHP、および Java はすべてほぼ同じように機能します。

于 2012-10-21T13:27:25.193 に答える