ここには、オブジェクト指向プログラミング(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
)。