ホームページ >バックエンド開発 >PHPチュートリアル >アドバイスを求めてください! PHPオブジェクト指向の学習とその対処法

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

WBOY
WBOYオリジナル
2016-06-13 12:48:50786ブラウズ

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

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

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

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


では、皆さん、ありがとうございました。 ! !


------解決策----------------------
「PHP 高度なプログラミング: パターン、フレームワーク、テスト ( HD中国語PDF版)》
http://www.verycd.com/topics/2783113/
-----解決策---------
クラス内の静的変数。静的変数を使用すると、リソースの使用量を削減できます。では、どのような状況で静的変数を使用する必要があるのでしょうか?グローバル変数との類似点と相違点は何ですか?

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

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

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

どのような状況で定数を定義する必要があるのでしょうか?
例えば、人間の性別、動物のオスとメスなどです。定数を定義しない場合は、0
を使用してください-----解決策-------------------------- -------
1、男性
-----解決策---------
女性 男性を間違って入力すると、「メラはきれいではないですか?」となります。 ?そして、ある日、01 の表現を男性と女性に変更したい場合は、数千万行のコードを検索する必要があります。定義を変更するのではなく、定数を使用すると便利です。 。 。
#!
<?php<br>
クラス人{<br>
<br>
public static $count = 0; ### クラス <br> のインスタンスの数を記録します。
const GENDER_MALE = '男性';<br>
const GENDER_FEMALE = '女性';<br>
<br>
プライベート $_gender = self::GENDER_MALE;<br>
プライベート $_name = 'noname';<br>
<br>
パブリック関数 setName($name){<br>
$this->_name = $name;<br>
$this を返す;<br>
}<br>
<br>
パブリック関数 __construct($name='' , $gender=self::GENDER_MALE){<br>
self::$count ;<br>
$this->_name = $name;<br>
$this->_genger = $gender;<br>
}<br>
<br>
パブリック関数 __destruct(){<br>
self::$count--;<br>
}<br>
<br>
パブリック関数 calc($action='add' , $num=1){<br>
static $sum = 0;<br>
<br>
If($action == 'add'){<br>
$sum = $num;<br>        }else if($action == 'sub'){<br>
            $sum -= $num; <div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。