ホームページ >バックエンド開発 >PHPチュートリアル >不毛の土曜日 - PHP オブジェクト指向 (3)

不毛の土曜日 - PHP オブジェクト指向 (3)

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

閑散とした土曜日 - オブジェクト指向 PHP (3)

こんにちは

今日もカイセンの土曜日です。 2週間溜め込んでいた洋服がようやくほぼ完成しました。午後から何かを学びに来ました~~

1. PHP オブジェクト指向 (3)

4. OOP の高度な実践

4.3 静的-静的メンバー

date_default_timezone_set("PRC");
/**
* 1. クラスの定義は class キーワードで始まり、その後にクラス名が続きます。クラス名は通常、各単語の最初の文字を大文字にして付けられます。
* 2. クラス
の属性を定義します。 * 3. クラス
のメソッドを定義します。 * 4. クラス
のオブジェクトをインスタンス化します。 * 5. オブジェクトの属性とメソッドを使用します。
*/

class Human{
public $name;
public $height;
public $weight;

public function Eat($food){
echo $this- >name ." は ".$food." を食べています
";
}
}

class Animal{
public $kind;
public $gender;
}


class NbaPlayer extends Human{
// クラス属性の定義
public $name="Jordan" // 属性を定義
身長= "198cm";
public $weight="98kg";
public $team="Bull";
public $playerNumber="23";
private $age="44";
public $president="David Stern";



// クラスメソッドの定義
public function changePresident($newP){
$this->president = $newP;
}

public function run() {
echo "Running
";
}

public function Jump(){
echo "ジャンピング
";
}

public function dribble(){
echo "ドリブル
";
}

public functionshoot(){
echo "Shooting
";
}

public function dunk(){
echo "Dunking
";
}

public function pass(){
echo "Passing
";
}

public function getAge(){
echo $this - >name." の年齢は ".$this->age;
}

function __construct($name, $height, $weight, $team, $playerNumber){
$name . ";" .$this->name; // $this はオブジェクト自体を表す php の疑似変数です
$this->height = $height; // オブジェクトの属性値は $this を通じて設定できます
$this-> ;weight = $weight;
$this->team = $team;
$this->playerNumber = $playerNumber;
}

}

/**
* 1. クラスをオブジェクトにインスタンス化する場合は、 new キーワードを使用し、その後に new 、クラス名と 1 組のかっこを続けます。
* 2. オブジェクトを使用すると、他の値を使用した場合と同様に代入操作を実行できます
*/
$jordan = new NbaPlayer("Jordan", "198cm","98kg","Bull","23");echo "
";
$james= new NbaPlayer("James", "203cm", "120kg", "Heat", "6");echo "
";
// アクセスに使用される構文オブジェクトのプロパティは -> 記号の後に属性の名前が続きます
echo $jordan->name."
";
// メソッドの呼び出しに使用される構文オブジェクトの -> 記号、その後にメソッド名と括弧のペア
$jordan->run();
$jordan->pass();
//サブクラスは親クラスのメソッドを呼び出します
$jordan->eat("apple");
//プライベートを直接、内部パブリック関数を通じて呼び出してみます
//$jordan-> age;
$jordan->getAge();echo "
";

$jordan->changePresident("Adam Silver");

echo $jordan- >president."
";
echo $james->president."
";

上記の例から直接始めてみましょう。

ここで必要なことは、2 つのオブジェクトの変数を同時に

変更することです。 —— static

を使用します public static $president="David Stern";
// クラスメソッドの定義
public
static function changePresident($newP){
static::$president=$newP;//ここで static を self に置き換えるほうが仕様に沿っています }

ここに注目 メソッド内の static の位置と::

で呼び出されるメソッドも変更されています。

echo

NbaPlayer::$president;echo "
";

NbaPlayer::changePresident("Adam Silver");echo NbaPlayer::$president;echo "
";

つまり、前述したように、

静的メンバーは定数であるため、特定のメンバーを対象としていませんobject (特定のオブジェクトに束縛されない) - これに基づいて、定義、代入、呼び出しには特定のオブジェクトの参加は必要ありません。

内部呼び出しの場合は、self/static::$... を使用します。

外部呼び出しの場合は、クラス名::

目的はすべてのオブジェクトで共有されるデータです。

-- 内部で呼び出されたときに変数が親クラスにある場合

たとえば、上記の例では、この文を親クラス human

に記述しますpublic static $aaa="dafdfa";

次に、サブクラス nbaplayer で、親クラスの静的メンバーを呼び出すときに、

echo parent::$aaa;

外部呼び出しの場合は、上記のようにクラス名:: なので、直接の親クラス名を使用するだけです

echo Human::$aaa;

--Others

静的メソッドでは、他の変数にアクセスできません。つまり、$this->

--概要 を使用できません。

/**
* 静的メンバー
* 1. 静的プロパティはクラスのパブリック データを保存するために使用されます
* 2. 静的メソッドでアクセスできるのは静的プロパティのみです
* 3. 静的メンバーは必要ありませんオブジェクトをインスタンス化するには、
にアクセスします。 * 4. クラス内では、self または static キーワード
を使用して、その独自の静的メンバーにアクセスできます。 * 5. 親キーワード * 6. クラス名を通じてアクセスできます クラスの静的メンバーへの外部アクセス
*/

4.4 最終メンバー

--質問

クラスにサブクラスを持たせたくない;

サブクラスが親クラスの変数を変更したくない (上書きを避けるため?)

--final

》=php5 バージョン

たとえば、

class BaseClass{

public function test(){
echo "BaseClass::test called
";
}

public function test1(){
echo "BaseClass::test1 が呼び出されました
";
}
}

class ChildClass extends BaseClass{

public function test(){
echo "ChildClass::test called
";
}
}

$obj=new ChildClass( ;

と書いてください!

したがって、オーバーライドされたくない親クラスのメソッドについては、final

final public function test( ) {

など、サブクラスを持ちたくない親クラスの場合は、finalfinal class BaseClass{

--概要

/**

* 書き換えと最終

* 1. 親クラスと全く同じメソッドをサブクラスに書くことで、親クラスのメソッドの書き換えを完了できます * 2. 書き換えたくないクラスの場合任意のクラスに継承される場合は、クラス * 3 の前に最後のキーワード を追加できます。サブクラスによって上書き (上書き、変更) されたくないメソッドの場合、最後のキーワード

をクラスの前に追加できます。メソッド定義。*/



4.5 データ アクセス


最初に最後の作業を行います。

--parent を削除してから、サブクラスのメソッドに

parent::test();

を記述します。実行すると、結果がまだであることがわかります。親キーワードを使用して親クラスを

呼び出し、書き換えられたデータ

--self

を呼び出してから、 self::test1();

実行後、

self が同じクラス内のデータを呼び出せることが判明(その他のメソッド/静的変数/定数 const)

--概要

/** * データ アクセスの補足

* 1.parent キーワードを使用して、親クラスのオーバーライドされたクラス メンバーを呼び出すことができます

* 2. self キーワードを使用して、クラス自体のメンバー メソッドにアクセスできますまたは、独自の静的メンバーとクラス定数にアクセスするために使用できます。クラス定数にアクセスする場合、クラス自体のプロパティにアクセスするために使用することはできません。定数名 * 3. static キーワードは、クラス自体によって定義された静的メンバーにアクセスするために使用されます。静的プロパティにアクセスする場合は、プロパティ名の前に $ 記号 を追加する必要があります。*/


4.6 オブジェクト インターフェイス


非常に重要です。 ! !

--問題

異なるクラスは同じ動作をしますが、同じ動作でも実装方法が異なります。

例えば、人間も動物も食事をしますが、その食べ方は異なります。

--

インターフェースの定義は、異なるクラスの共通の動作を定義し、異なるクラスに異なる関数を実装することです。

--Lizi

// インターフェイスを定義します

interface ICanEat{

public function Eat($food) );}

ご覧のとおり、インターフェイスにはメソッドの特定の実装がありませんが、メソッドは必ず存在します。
したがって、以下は「人間は食べることができる」です。
//インターフェイスに接続された具体的なオブジェクト

クラス Human 実装 ICanEat{

public function Eat($food){

echo "".$food." を食べる人間。";

}
}$obj=new Human( );
$obj->eat("shit");

私が与えた「食べ物」は無視してください。

は extends をもう使用せず、実装していることに注意してください。すると、同じメソッド名は全く同じになります。次に、オブジェクトはメソッドを実装する必要があります、または実装することが望ましいです。


Continue

interface ICanEat{

public function Eat($food);}

//インターフェイスに接続された特定のオブジェクト

class Human 実装 ICanEat{

public function Eat($food){

echo "".$food." を食べる人間。
";
}
}

クラス Animal は ICanEat を実装します{
public function Eat($food){
echo "".$food." を食べる動物。
";
}
}


$obj=new Human();
$obj->eat("shit");

$monkey=new Animal();
$monkey ->eat("バナナ");

動物たちにも食べさせましょう!

-- 操作

を逆にして、オブジェクトがインターフェイスに接続されているかどうかを判断します。

var_dump($objinstanceof ICanEat);

はブール値を返します。

--その他クリ

インターフェイス ICanPee extends ICanEat{
public function pee();
}

class Demon は ICanPee を実装します{
public function pee(){
echo "悪魔はおしっこできますか?";
}
public function Eat($food){
echo "悪魔は食べられますか?" ".$food;
}
}

$ghost=new Demon();
$ghost->pee();
$ghost->eat (" shit");

インターフェイスは本質的にクラスであり、継承/継承できます。ただし、継承されたインターフェイスを使用する場合、親クラスと「祖父クラス」のすべてのメソッドには特定の実装が必要です。

--概要

/**
* インターフェイス
* 1. インターフェイスの基本概念と基本的な使用法
* 2. インターフェイス内のメソッドには特定の実装はありません
* 3. インターフェイスを実装するクラスはインターフェイスを提供する必要があります定義されたメソッド
* 4. インターフェイスを使用してオブジェクトを作成することはできませんが、オブジェクトがインターフェイスを実装するかどうかを決定することはできます
* 5. インターフェイスはインターフェイスを継承できます (インターフェイスはインターフェイスを拡張します)
* 6. インターフェイス内 すべて定義されたメソッドはパブリックである必要があります。これはインターフェイスの特性です。
*/

aaaaaaaaaaaaaaaaaa

bu xiang xie le......................

ming tian yao ge.................... .

1Frickon
元投稿者さんに会いに来ました。 1週間もランニングを続けていない人のために、何かヒントはありますか?
Re: Tenhuan
@rickon、気が散る事はあまりないかもしれません。彼女もいないし、他のゲームもやらないし、友達の輪も閉じました(あまりにも些細で面倒なので)。 , 私は通常、日中は教務研究室に行き、何もすることがない場合は夜に勉強します。週末も寝ています。となると、重要なのは 2 つかもしれません。1 つは来年仕事を見つけて、精神的に楽になるために何かを学ぶことです。もう 1 つはインターネットの進歩についていくことです。独学では難しすぎるでしょう。初めは、私のような自制心にとっては非常に難しいです。頑張れないという点については、ポジティブなフィードバックができると思います。簡単に言うと、頑張って毎日何かを得ることができますが、その収穫をゲームのようにイメージする必要があります。同様に、直感的なデジタルのものはより大きな影響を与えます。 、お役に立てば幸いです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。