web-dev-qa-db-ja.com

PHPオブジェクト指向ですか?

PHPオブジェクト指向言語ですか?そうでない場合、CakePHPフレームワークはどうですか?PHPのオブジェクト指向MVC実装ですか?

また、PHP classesを使用して完全にビルドされたアプリケーションをobject-oriented

39
avon_verma

はい、PHPの最新バージョンはオブジェクト指向です。つまり、自分でクラスを記述し、継承を使用できます。必要に応じて、組み込み機能もオブジェクトに組み込まれます(MySQL機能など) 。

ただし、まだ多くの緩い関数があります。そのため、オブジェクト指向PHPです。私はそう思う。そして、はいCakePHPはオブジェクト指向フレームワークです。

39
GolezTrol

いいえ、PHPは完全にオブジェクト指向言語ではありません。

また、C++もJavaもありません。これらはすべてプリミティブ型(およびPHPにはstr_replace()is_*()、これは本質的に明らかに手続き型です。私が知っている純粋なオブジェクト指向言語は、Ruby and Scala(後者は関数型プログラミングのパラダイムをより目指していると主張することができます)。

PHPは、「オブジェクト対応言語」です。

PHPで記述されたコードについては、クラスを使用しているからといって、OOPにならないことを理解する必要があります。特に、コードの大部分が静的クラスに基づいている場合。

したがって、「CakePHPはOOフレームワークですか? 』」と尋ねると、答えは-[〜#〜] no [〜#〜]です。お世辞の説明は、 "クラス指向プログラミング"になります。コードベースは静的メソッドと変数で満たされ、クラスはよりネームスペースのように機能します。基本的に、CakePHPは手続き型のコードであり、構文でラップされており、表面上はオブジェクト指向のコードを模倣しています。

93
tereško

オブジェクト指向として分類される言語では、オブジェクト指向の少なくとも3つの原則(継承、ポリモーフィズム、およびカプセル化)に従う必要があります。私はPHPを知らないが、これまで使用したことはないが、少なくともこれらの3つの原則を満たしていれば、OOそれ以外の場合はそうではない。 PHP各原則をサポートするかどうかを検索することをお勧めします。開発者は現在使用している言語に過度に執着する傾向があり、多くの場合、見当違いで偏見があります。 C++はオブジェクト指向プログラミングではなく、多くの賛辞を受け取っています!この人は真実から遠く離れることはできませんでしたが、彼の答えは多くの人に正しいようです!

少し掘り下げてみたところ、PHP5はこれらの3つの原則をサポートしているようです!

2
WhiteWabbit

PHPは完全にオブジェクト指向ではありませんが、次のような機能をサポートしています

1)クラス
2)オブジェクト
3)コンストラクタとデストラクタ
4)オブジェクトの継承
5)スコープ解決演算子(::)

などなど。オブジェクト指向のPHPを学びたい場合は、以下の参照リンクを参照してください

1) http://php.net/manual/en/language.oop5.php

2
Sandeep Shirsat

興味深い質問。しかし、「いいえ」、PHPはオブジェクト指向ではなく、オブジェクト指向言語です。ええ、しかしCakePHPはオブジェクト指向フレームワークです。

2
Piyush

オブジェクト指向技術は、多くの場合、カプセル化、ポリモーフィズム、および継承の観点から説明されます。しかし、これらは単なるアイデンティティです。オブジェクト指向技術を成功させるには、オブジェクトに重点を置く必要があります。

オブジェクト-データと手順を含むパケット

メソッド-サービスを提供する

メッセージ-メソッドの実行要求

クラス-オブジェクトを作成するためのテンプレート

インスタンス-クラスに属するオブジェクト

カプセル化-オブジェクトによってサポートされる情報隠蔽

継承-クラス仕様の再利用を許可するメカニズム

クラス階層-継承関係を表すツリー構造

多態性-共通のインターフェースの背後に異なる実装を隠すため

[Alan Kays] [4] ["Considered by some to be the father of object-oriented programming"]定義:

  1. EverythingIsAnObject。

  2. オブジェクトは、(オブジェクトに関して)メッセージを送受信することにより通信します。

  3. オブジェクトには独自のメモリがあります(オブジェクトに関して)。

  4. すべてのオブジェクトはクラスのインスタンスです(オブジェクトでなければなりません)。

  5. クラスは、インスタンスの共有動作を保持します(プログラムリスト内のオブジェクトの形式で)

An object is defined by a triple (OID, type constructor, state) where OID is the unique object identifier, type constructor is its type (such as atom, Tuple, set, list, array, bag, etc.) and state is its actual value.

Java、C++、およびPHPルール1に違反しているのはなぜですか?bcoz int, float etc. (there are a total of eight primitive types).であるため、厳密な意味ではオブジェクト指向ではありませんが、一部の人はそれをOOPと見なしています。

2
Linus

最新のOOP機能はすべて、バージョン5のPHPにあります。PHP v5の前には、PHP v4がありました。完全にオブジェクト指向ではありません。

また、次のような多くの新しい高度なフレームワークがあります。

これらのフレームワークにはいくつかの優れた機能があり、真の意味で非常に強力であり、プログラマーに優しいものもあります。

いくつかの注目すべき点:-

  • PHP v5は、まだ多重継承をサポートしていません。
  • PHP v5は手続き型のコーディング方法を引き続きサポートしているため、古いWebサイト(PHP v4を使用して手続き型の方法で開発された)に対して下位互換性があります。

それが役に立てば幸い。

0