PHPを暗記しながら学ぶ - (12) オブジェクト指向プログラミング2

WBOY
リリース: 2016-08-08 09:32:30
オリジナル
871 人が閲覧しました

この記事と前の記事の間に少し時間があり、途中に小さなプロジェクトが挿入されました。でもそんなことはなく、「暗記しながらPHPを学ぶ」はこれからも続きます。

PHPオブジェクト指向プログラミング

(2)クラス属性

いわゆるクラス属性とは、クラス内で宣言された変数です。クラス外で宣言された変数との違いは、変更されたアクセス許可 (前の記事の public/private/protected) が前に追加されることです。たとえば、学生の学生番号、名前、性別、年齢、クラスなどを含む学生クラスを宣言したいとします。次に、次のように宣言できます。

<?php
class Student{
	private $sid;
	private $name;
	private $gender;
	private $age;
	private $grade;

	public getSid(){
		return $this->sid;
	}
	public getName(){
		return $this->name;
	}
	public getGender(){
		return $this->gender;
	}
	public getAge(){
		return $this->age;
	}
	public getGrade(){
		return $this->grade;
	}

	public setSid($sid){
		$this->sid = $sid;
	}
	public setName($name){
		$this->name = $name;
	}
	public setGender($gender){
		$this->gender = $gender;
	}
	public setAge($age){
		$this->age = $age;
	}
	public setGrade($grade){
		$this->grade = $grade;
	}

}
ログイン後にコピー

上記の学生クラスでは、5 つの属性を宣言しました。これらはすべてプライベートと宣言されています。クラス外からは直接アクセスできないため、2 つのメソッドが提供されています。それぞれのプロパティにアクセスし、その値を設定します。一般に、クラスを宣言するとき、プロパティはプライベートとして宣言され、メンバー メソッドはパブリックとして宣言されるため、外部の世界はパブリック メソッドを通じてプライベート プロパティにアクセスできます。また、アクセスおよび設定メソッドを宣言する場合、通常、getXXX() および setXXX() の形式が使用され、XXX の最初の文字は大文字になります。もちろん、パブリック プロパティとして宣言することもできるため、値を直接割り当ててクラスの外からアクセスすることもできます。ただし、将来的に標準化された場合、各クラスはこのクラスを特別に保存するための個別の PHP ファイルとして存在するため、プライベート属性として宣言することをお勧めします。プライベートとして宣言すると、値が確実に保存されます。このクラスのオブジェクトは自由に変更されないため、セキュリティが確保されます。

属性を宣言する場合、追加クラス変数と同様に、宣言中に値を割り当てることもできます。

ここで注意してください:

属性には、値、配列、さらには別のクラスのオブジェクトを格納できます。たとえば、上記の学生クラスに学校の名前、住所などの学校属性を追加します。最初に学校クラスを宣言します

class School{
	private $name;
	private $address;

	public getName(){
		return $this->name;
	}
	public getAddress(){
		return $this->address;
	}
	public setName($name){
		$this->name = $name;
	}
	public setAddress($address){
		$this->address = $address;
	}
}
ログイン後にコピー
次に、次のように学生クラスに学校属性を追加できます:

<?php
class Student{
	...
	private $school;

	...
	public getSchool(){
		return $this->school;
	}

	...
	public setSchool($school){
		$this->school = $school;
	}

}
ログイン後にコピー
この方法では、他の属性と同じように見えますが、代入するときパラメータを取得するときは、オブジェクトを渡すように注意してください。例:

まず学校を宣言します:

<span style="white-space:pre">	</span>$school1 = new School();
<span style="white-space:pre">	</span>$school1->setName("大连理工大学");
<span style="white-space:pre">	</span>$school1->setAddress("大连");
<span style="white-space:pre">	</span>$stu1 = new Student();
<span style="white-space:pre">	</span>$stu1->setSchool($school1);
ログイン後にコピー
このようにして、がその学校を訪問するときのオブジェクトになります。この生徒がいる学校の名前を知りたい場合は、次のようにします。 will アクセスするには次のようにします:

<span style="white-space:pre">	</span>$stu1->getSchool()->getName();
ログイン後にコピー
getSchool メソッドを使用して School オブジェクトを取得し、School オブジェクトの getName メソッドを使用してその名前にアクセスします。

クラス内の変数にアクセスするときに $this キーワードを使用したので、this キーワードについて説明します。

(3) $this キーワード

パブリック、プライベート、または保護されたメンバー変数として宣言されているかどうかに関係なく、クラス内の独自の変数へのアクセスが確実に存在するため、$this キーワードを使用する必要がありますキーキャラクター。私の意見では、$this キーワードはクラス自体を指し、それ自体を独自のプロパティを呼び出すオブジェクトとして扱うことも理解できます。ここで、変数を宣言するときに $ 記号を使用することに注意してください。ただし、$this を使用してアクセスする場合は、これと $ 記号のみを使用し、後続の属性を追加しないでください。追加しないと、エラーが報告されます。具体的な使用方法については、上記のコードを参照してください。もちろん、外部で宣言されたオブジェクトが呼び出される場合、それは $this と同じであり、$ 記号をオブジェクトに追加する必要がありますが、後で追加する必要はありません。

(4) 静的属性

静的属性をどう説明するか思いつきませんでしたが、本の中でそれをよく表している次の文を見つけました: 静的属性は、 specific インスタンス オブジェクトではなくクラスに関連する永続値。静的プロパティは使い古されたグローバル変数と考えることができます。静的プロパティの重要な特徴は、静的プロパティにアクセスするときに、クラスのインスタンスを作成する必要がないこと、つまり、クラスのオブジェクトを定義する必要がないことです。

この本の中で、車のカテゴリーには販売数量の静的な属性があります。つまり、誰が車を買っても、とにかく売れれば、私の販売数量は増加します。 1までに。しかし、私はすでに学生と学校の例を挙げましたが、私は学校の卒業生のこの特質について考えます。つまり、あなたが誰であっても、私の学校を卒業している限り、そうすると、卒業生があと1人増えることになります。次に、次のように宣言できます:

<span style="white-space:pre">	</span>public static $graduate;
ログイン後にコピー
つまり、変数の前に static キーワードを追加します。この静的属性にアクセスするときは、オブジェクトを使用して直接アクセスする必要はありません。 School::$graduate = ...; それだけです。これは、定義する必要のないオブジェクトにアクセスできると上で述べたことです。ここで、静的属性と通常の属性の違いを図で説明します。

静态属性只占这个内存,不管存不存在对象实例,除非这个类没了,否则会一直占有自己的内存。而普通的属性在每次声明对象的时候都会分配内存。

静态属性一般声明成公有的。

(6)类常量

与类外的普通常量一样,类常量也是存储一个固定的值。使用const关键字进行声明,这里不需要加权限修饰。在访问的时候跟访问静态属性一样需要使用类名::(双冒号)加常量名来访问。比如如果我声明一个手机类,手机有各种型号,那么我可以把各个手机型号用常量来存储,在给手机型号属性赋值的时候使用这些常量来赋值就好了。但是可能有这种疑惑,为什么要使用常量,我直接声明不就行了。那么可以这样理解:

class Phone{
	const IPHONE = 1;
	const ZTE = 2;
	const HUAWEI = 3;

    //这里面各种属性

}
ログイン後にコピー
我这个是一个手机类,里面声明了三个常量,这里注意,声明常量不需要$符号,并且常量的名字一般大写。但是你注意我在里面存储的是int型的数据,如果我给手机型号赋值的时候虽然给他赋值是类似:$this->type = ZTE;但是我的型号存的是int型的数据,那么就会占内存少,如果我不适用常量$this->type = 'ZTE';这样我就存的字符串。并且使用常量可以提高编译速度。

这是我理解的常量的优点。但是我没怎么用过。

下一篇继续面向对象。

以上就介绍了边记边学PHP-(十二)面向对象编程2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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