アドバイスを求めてください! PHPオブジェクト指向学習

WBOY
リリース: 2016-06-23 14:06:21
オリジナル
832 人が閲覧しました

最近、PHP でオブジェクト指向プログラミングを学習する過程でいくつかの問題に遭遇したので、専門家に答えてもらいたいと思っています。

1. クラス内で静的変数を使用すると、リソースの使用量を削減できます。では、どのような状況で静的変数を使用する必要があるのでしょうか?グローバル変数との類似点と相違点は何ですか? ~(これは私を非常に混乱させます)。

2. クラスの定数。クラスで定義された定数と非クラスで定義された定数の利点と欠点は何ですか? ~定数を定義する必要があるのはどのような状況ですか? ~

3. 学習できる優れた PHP オブジェクト指向の例はありますか? ~「はい」の場合、関連リンクを提供してください。 (基礎的な学習ではなく、少し踏み込んだ授業例です)


では、皆さん、よろしくお願いします。 ! !


ディスカッションへの返信 (解決策)

1. グローバル変数はすべてのメソッドと関数で使用でき、一度変更されるとすべて変更されますが、静的変数は通常 A や B などのクラスに存在します。クラスは両方のクラスの下にグローバル変数 CC を持つことができます。A の静的変数 CC が変更されても、B の CC には影響しません。

2. 定数には、一度定義すると変更できないという特性があります。一般的に、写真の保存場所など、変更されない場所に使用されますが、このような場所は変更される可能性がありますが、少なくとも変更は困難です。

3. PHP マニュアルには比較的完全な入門書が記載されています。徹底的に学びたい場合は、C# または JAVA を試してから、水に入ったアヒルのようにオブジェクト指向を理解できるようになります。私はあまり専門的ではないので、過失があるかもしれませんが、レンガの購入を歓迎します。

「PHP 高度なプログラミング: パターン、フレームワーク、およびテスト (HD 中国語 PDF バージョン)」

http://www.verycd.com/topics/2783113/


「PHP 高度なプログラミング: パターン、フレームワーク、およびテスト (HD) 中国語」 PDF版)》

http://www.verycd.com/topics/2783113/

共有していただきありがとうございます、ダウンロードが進行中です。 。 。 。

PHP バイブルを読むだけですべてがわかります。断片的に学習しても意味がありません。

PHP マニュアル、上記には多くの例があります、すべてが対象です、もっと試してください

クラス内の静的変数、静的変数を使用すると、リソースの使用量を削減できます。では、どのような状況で静的変数を使用する必要があるのでしょうか?グローバル変数との類似点と相違点は何ですか?

リソースの使用量は削減できますか?

私の理解は(2つの側面で)次のとおりです:
0. クラスの静的変数は、「クラス自体の静的変数」(クラスに属する)と、クラスメソッドの静的変数(クラスに属する)に分けられます。 、ただし別の場所で定義されています)。
1. (記憶領域) 静的変数はクラス全体に属するため、多くのオブジェクトをインスタンス化するときにメモリを節約できます。
2. (操作時間) 低レベルの観点から見ると、クラスの静的変数よりもインスタンス変数に対処する方が時間がかかりませんが、クラス メソッドの静的変数についてはわかりません (専門家がこの質問に答えるのに役立ちます)。
いつ使用しますか?
1. (クラスに属する静的変数) たとえば、Person クラスのインスタンスがいくつインスタンス化されたかを記録したい場合は、クラスの静的変数を使用できます。 (例: ある場所に何人いるか: __construct を使用する場合は 1 を加算し、__destruct を使用する場合は 1 を減算します)
2. (クラスのメソッドに属する静的変数) この状況は主に「コンテキスト関連」です。 (つまり、この関数が最後に実行された時刻)その結果は、四則演算などのこの実行の結果に直接的または間接的に影響します)。
グローバル変数との類似点と相違点は何ですか?
グローバル変数は、名前が示すようにグローバルです。オブジェクト指向プログラミングの主な目的は、「高い凝集性と低い結合性」を実現することです。たとえば、総人口 $count の場合、グローバル変数を使用すると、次にこの合計に遭遇したときに、変更が大きくなる可能性があります。他の人もこの変数を使用すると、コードを自分だけで作成できない場合があります。どうなるのですか?もうカップではありません。 。 。しかし、クラスの静的変数 (少なくとも各クラスには独自の $count があります)

定数をクラス内で使用する場合、この問題は問題になりません。クラスで定義された定数と非クラスで定義された定数の利点と欠点は何ですか?
クラスで定義された定数とクラス以外で定義された定数の違いは、その名の通り性別などの利用範囲です
person::GENDER_MALE = '男性'
person::GENDER_FEMALE = '女性'
ニワトリ::GENDER_MALE = '女性'
Chicken::GENDER_FEMALE = '女性'
Cat::GENDER_MALE = '男性'
Cat::GENDER_FEMALE = '女性'
これら 2 つの定数をグローバルに定義する場合、あまり考え込まれたものではありません。

どのような状況で定数を定義する必要があるのでしょうか?
人間の性別、動物のオスとメスなど。定数を定義せずに0|1、男性|女性とすると、男性を間違って入力するとメラになってしまいます。 ?そして、ある日、01 の表現を男性と女性に変更したい場合は、数千万行のコードを検索する必要があります。定義を変更するのではなく、定数を使用すると便利です。 。 。
すごい

静的変数を使用するとリソースの使用量を削減できますか? ? ?
クラスの静的プロパティとグローバル変数の違いはスコープの違いにあります
多くのオブジェクトがクラスからインスタンス化される場合、静的プロパティは各オブジェクトによって共有される共通のデータ領域になります
これはリソースとは関係ありません消費

同じはい、クラス定数と定数はスコープが異なるだけです
同様に、クラスの静的メソッドはスコープが制限された関数のセットです

php5.3 では名前空間の概念が再導入されて以来、それらの「静的」なものはすべて適切な位置に落ちます

オブジェクト指向プログラミングを学習するときは、問題を検討するためにオブジェクト指向のアプローチを使用する必要があります
これらの非常に不適切に翻訳された用語に騙されないでください


静的変数 self と $this は確かにそうですあまり似ていない わかりやすい。
Self の後にはメソッドまたは変数のみを続けることができますが、変数に値を割り当てることはできません。
以下の私の書き方ではエラーが報告されます。

リーリー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート