閑散とした土曜日 - オブジェクト指向 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 "
";
echo $jordan- >president."
";
echo $james->president."
";
変更することです。 —— static
を使用します public static $president="David Stern";
// クラスメソッドの定義
public
static function changePresident($newP){
static::$president=$newP;//ここで static を self に置き換えるほうが仕様に沿っています }
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 が呼び出されました
";
}
}
public function test(){
echo "ChildClass::test called
";
}
}
と書いてください!
したがって、オーバーライドされたくない親クラスのメソッドについては、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) );}
ご覧のとおり、インターフェイスにはメソッドの特定の実装がありませんが、メソッドは必ず存在します。
したがって、以下は「人間は食べることができる」です。
//インターフェイスに接続された具体的なオブジェクト
public function Eat($food){
echo "".$food." を食べる人間。"; }
}$obj=new Human( );
$obj->eat("shit");
私が与えた「食べ物」は無視してください。
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.................... .