ホームページ >バックエンド開発 >PHPチュートリアル >無人の土曜日 - PHP オブジェクト指向 (3)、土曜日 - PHP オブジェクト指向_PHP チュートリアル
こんにちは
またカイセンの土曜日です。 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." を食べています< br/>";
}
}
クラス動物{
public $kind;
public $gender;
}
class NbaPlayer extends Human{
//クラス属性の定義
public $name="Jordan";//属性の定義
public $height="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 "Jumping
";
}
public function dribble(){
echo "Dribbling
";
}
public functionshoot(){
echo "射撃
";
}
public function dunk(){
echo "ダンキング
";
}
public function pass(){
echo "通過
";
}
public function getAge(){
echo $this->name." の年齢は ".$this->age;
}
function __construct($name, $height, $weight , $team, $playerNumber){
$name . ";" . ";" ;name = $name; // $this はオブジェクト自体を表す php の疑似変数です
$this->height = $height; // $this はオブジェクトの属性値を設定するために使用できます
->体重 = $weight;
$this->チーム = $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."
";
ここで達成したいのは、
2 つのオブジェクトの特定の変数を同時に変更することです。 ——静的を使用します
public static $president="David Stern";
// クラスメソッドの定義
public
static function changePresident($newP){
static::$president=$newP;// ここで static を変更します自分自身がより標準に沿っています }
に注意してください
通話方法も変わりました。echo
NbaPlayer::$president;echo "
";
NbaPlayer::changePresident("Adam Silver");echo NbaPlayer::$president;echo "
";
静的メンバーは定数であるため、特定のオブジェクトを対象としていません (特定のオブジェクトによって制限されません) — これに基づいて、定義、代入、および呼び出しには、特定のオブジェクト。
内部呼び出しの場合は、self/static::$...を使用します
外部呼び出し、クラス名::
目的はすべてのオブジェクトで共有されるデータです。
-- 内部で呼び出されたときに変数が親クラスにある場合
例えば上記の例では、親クラスのhumanにこの文を書きます
パブリック静的 $aaa="dafdfa";
次に、サブクラス nbaplayer で、親クラスの静的メンバーを呼び出すときに、
エコー 親::$aaa;
外部呼び出しの場合は、上記のようにクラス名::なので、親クラス名を直接使用してください
エコー人間::$aaa;
--その他
静的メソッドでは、他の変数にアクセスできません。つまり、$this->
--概要
/**
* 静的メンバー
* 1. 静的プロパティは、クラスの公開データを保存するために使用されます
* 2. 静的メソッドでは静的プロパティのみにアクセスできます
* 3. 静的メンバーは、オブジェクトをインスタンス化せずにアクセスできます
* 4.クラス内では、 self または static キーワードを使用して独自の静的メンバーにアクセスできます
* 5。親クラスの静的メンバーには、parent キーワードを使用してアクセスできます
* 6。 クラスの静的メンバーには、外部からアクセスできます。クラス名
*/
4.4最終メンバー
--質問
クラスにサブクラスを持たせたくありません;
サブクラスが親クラスの変数を変更しないようにします (オーバーライドを避けますか?)
--最終
》=php5のバージョン
例を挙げてください
class BaseClass{
public function test(){
echo "BaseClass::test が呼び出されました
";
}
public function test1(){
echo "BaseClass::test1 が呼び出されました
" ;
}
}
class ChildClass extends BaseClass{
public function test(){
echo "ChildClass::test called
";
}
}
$obj=new ChildClass();
$obj->test();
親クラスと同じメソッド名をサブクラスに書くと(内容は違っても良い)、親クラスのメソッドの書き換えが完了します!
したがって、オーバーライドされたくない親クラスのメソッドについては、final
と記述してください最終パブリック関数テスト(){
同様に、サブクラスを持ちたくない親クラスの場合は、クラス名にfinalと記述します
最終クラスBaseClass{
--概要
/**
* 書き換えと最終
* 1. 親クラスと全く同じメソッドをサブクラスに書くことで、親クラスのメソッドの書き換えが完了します
* 2. どのクラスにも継承したくないクラスの場合、クラスの前にfinalキーワードを追加できます
* 3. サブクラスによって上書き(上書き、変更)されたくないメソッドの場合、メソッド定義の前にfinalキーワードを追加できます
*/
4.5 データアクセス
最初にすべての決勝を削除します
--親
それをサブクラスのメソッドに記述します
親::test();
実行後は、たとえデータが書き換えられたとしても、親キーワードを介して親クラスを呼び出すことができることがわかります
--自分
次に親クラスのメソッドテストを書きます
self::test1();
実行後、自身が同じクラス内のデータ(他のメソッド/静的変数/定数const)を呼び出せることが分かりました
--概要
/**
* データアクセスの補足
* 1.parent キーワードは、親クラスのオーバーライドされたクラス メンバーを呼び出すために使用できます
* 2. self キーワードは、クラス自体のメンバー メソッドにアクセスするために使用できます。独自の静的メンバーとクラス定数にアクセスする; クラス自体のプロパティにアクセスするために使用することはできません; クラス定数にアクセスする場合、定数名の前に $ 記号を追加する必要はありません
* 3. static キーワードが使用されます。クラス自体で定義された静的メンバーにアクセスするには、静的プロパティにアクセスするときは、プロパティ名に $ 記号を追加する必要があります 前に $ 記号を追加します
*/
4.6 オブジェクトインターフェース
とても重要です! ! !
--質問
異なるクラスは同じ動作をしますが、同じ動作でも実装方法は異なります。
例えば、人間も動物も食事をしますが、食べ方が違います。
--定義
インターフェイスは、さまざまなクラスの共通の動作を定義し、さまざまなクラスにさまざまな機能を実装します。
--栗
//インターフェースを定義する
interface ICanEat{
public function Eat($food);
}
ご覧のとおり、インターフェイスにはメソッドの特定の実装はありませんが、メソッドは必ず存在します。
ということで、以下は「人間は食べられる」です
//インターフェイスに接続された特定のオブジェクト
class Human 実装 ICanEat{
public function Eat($food){
echo "".$food." を食べる人間。
";
}
}
$obj=new Human();
$obj->eat("shit");
私が与えた「食べ物」は無視してください。
では「extends」が使用されなくなり、「implements」が使用されることに注意してください。すると、同じメソッド名は全く同じになります。次に、オブジェクトはメソッドを実装する必要があります、または実装することが望ましいです。
続ける
インターフェース ICanEat{
パブリック関数 Eat($food);
}
//インターフェイスに接続された特定のオブジェクト
クラス Human 実装 ICanEat{
public function Eat($food){
echo "".$food." を食べる人間。
";
}
}
class Animal は ICanEat{
public function Eat($food){
echo "".$food." を食べる動物。
";
}
}
$obj=新しい人間();
$obj->eat("クソ");
$monkey=新しい動物();
$monkey->eat("バナナ");
動物たちにも食べさせましょう!
--逆の操作
オブジェクトがインターフェイスに接続されているかどうかを判断します。
var_dump($objinstanceofICanEat);
はブール値を返します。
--もっと栗
インターフェース ICanPee は ICanEat{
public function pee();
}
class Demon は ICanPee を実装します{
public function pee(){
echo "悪魔はおしっこできますか?";
}
public function Eat($food){
echo "悪魔は食べられますか".$food;
}
}
$ghost=新しいデーモン();
$ゴースト->おしっこ();
$ゴースト->食べる("クソ");
インターフェイスは本質的にクラスであり、継承/継承が可能ですが、インターフェイスを継承するインターフェイスを使用する場合、親クラスと「祖父クラス」のすべてのメソッドには特定の実装が必要です。
--概要
/**
* インターフェイス
* 1. インターフェイスの基本概念と基本的な使用法
* 2. インターフェイス内のメソッドには特定の実装はありません
* 3. インターフェイスを実装するクラスは、インターフェイス内で定義されたメソッドを提供する必要があります
* 4.いいえ インターフェイスを使用してオブジェクトを作成しますが、オブジェクトがインターフェイスを実装しているかどうかを判断できます
* 5. インターフェイスはインターフェイスを継承できます (インターフェイスはインターフェイスを拡張します)
* 6. インターフェイスで定義されたすべてのメソッドはパブリックである必要があり、これはインターフェイスの特性ですインターフェース 。
*/
ああああああああああ
ブ・シャン・シェ・レ…………
ミンティエンヤオゲー....