$this

クラスとオブジェクト

$thisとは?

 状態:-  閲覧数:2,210  投稿日:2013-11-03  更新日:2013-11-03  
・生成されたオブジェクト自身へのリファレンス(同じ変数の内容を異なった名前でコールすること。実体の別名)

P … 親クラスインスタンス生成。親クラス内での$this

 閲覧数:656 投稿日:2013-11-08 更新日:2013-11-25 

概要


「プロパティ」オーバライド
・親クラスのインスタンスを生成
・親クラス内での$thisの挙動確認
→ 全て親クラス

ケース1
・親クラスプロパティprotected
・子クラスプロパティprotected
→親クラスプロパティ
class Oya{
   protected $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   protected $price="50"; // プロパティをオーバーライド
}  

$oya = new Oya();//親クラスのインスタンスオブジェクトを生成

echo '親クラスのインスタンスオブジェクトプロパティ' . $oya->getPrice(),PHP_EOL;

// 処理結果
// 親クラスのインスタンスオブジェクトプロパティ100


ケース2
・親クラスプロパティprivate
・子クラスプロパティprivate
→親クラスプロパティ
class Oya{
   private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   private $price="50";
}  

$oya = new Oya();//親クラスのインスタンスオブジェクトを生成

echo '親クラスのインスタンスオブジェクトプロパティ' . $oya->getPrice(),PHP_EOL;

// 処理結果
// 親クラスのインスタンスオブジェクトプロパティ100


ケース3
・親クラスプロパティprivate
・子クラスプロパティprotected
→親クラスプロパティ
class Oya{
   private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   protected $price="50";
}  

$oya = new Oya();//親クラスのインスタンスオブジェクトを生成

echo '親クラスのインスタンスオブジェクトプロパティ' . $oya->getPrice(),PHP_EOL;

// 処理結果
// 親クラスのインスタンスオブジェクトプロパティ100


P … 子クラスインスタンス生成。子クラス内での$this

 閲覧数:642 投稿日:2013-11-12 更新日:2013-11-25 

概要


「プロパティ」オーバライド
・子クラスのインスタンスを生成
・子クラス内での$thisの挙動確認
→ 全て子クラス

ケース1
・親クラスプロパティprotected
・子クラスプロパティprotected
→子クラスプロパティ
class Oya{
   protected $price="100";
}

class Ko extends Oya{
   protected $price="50"; // プロパティをオーバーライド

public function getPrice(){    // ゲッター
       return $this->price;
   }    

}  

$ko = new Ko();//子クラスのインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' . $ko->getPrice(),PHP_EOL


// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ50


ケース2
・親クラスプロパティprivate
・子クラスプロパティprivate
→子クラスプロパティ
※子クラス$thisから見た場合、privateプロパティの上書きは、子クラスにて新定義されたのと同じ扱い
class Oya{

   private $price="100";

}

class Ko extends Oya{

   private $price="50"; //子クラス$thisから見た場合、privateプロパティの上書きは、子クラスにて新定義されたのと同じ扱い

public function getPrice(){    // ゲッター
       return $this->price;
   }    

}  

$ko = new Ko();//子クラスのインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' . $ko->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ50


ケース3
・親クラスプロパティprivate
・子クラスプロパティprotected
→子クラスプロパティ
class Oya{

   private $price="100";

}

class Ko extends Oya{

   protected $price="50";

public function getPrice(){    // ゲッター
       return $this->price;
   }    

}  

$ko = new Ko();//子クラスのインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' . $ko->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ50


P … 子クラスインスタンス生成。親クラス内での$this

 閲覧数:686 投稿日:2013-11-15 更新日:2013-11-25 

概要


「プロパティ」オーバライド
・子クラスのインスタンスを生成
・親クラス内での$thisの挙動確認
→ 親クラスのプロパティがprivateかどうかで結果が異なる


ケース1


・親クラスプロパティprotected
・子クラスプロパティprotected
→子クラスプロパティ
処理の流れ
  1.$priceプロパティ … 子クラス 50(但し、親クラス内に限り100)
  2.$ko->getPrice(); … まず子クラス内でメソッドを探す
  3.存在しないので、親クラスのメソッドが実行される
  4.return $this->price; … 親クラスプロパティを見に行くが、継承先で上書きされているため、50 が返る
class Oya{

   protected $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    

}

class Ko extends Oya{

   protected $price="50";

}  

$ko = new Ko();//子クラスのインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' . $ko->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ50



ケース2


・親クラスプロパティprotected
・子クラスプロパティpublic
→子クラスプロパティ
処理の流れ
  1.$priceプロパティ … 子クラス 50(但し、親クラス内に限り100)
  2.$ko->getPrice(); … まず子クラス内でメソッドを探す
  3.存在しないので、親クラスのメソッドが実行される
  4.return $this->price; … 親クラスプロパティを見に行くが、継承先で上書きされているため、50 が返る
class Oya{
protected $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   public $price="50"; // プロパティをオーバーライド
}

$ko = new Ko();//子クラスインスタンスオブジェクトを生成

echo '子クラスインスタンスオブジェクトプロパティ(親クラスプロパティより取得)' . $ko->getPrice(),PHP_EOL;

echo '<br />子クラスインスタンスオブジェクトプロパティ(子クラスプロパティより取得)' . $ko->price,PHP_EOL;

// 処理結果
// 子クラスインスタンスオブジェクトプロパティ(親クラスプロパティを見に行くが、継承先で上書きされているため)50
// 子クラスインスタンスオブジェクトプロパティ(子クラスプロパティより取得)50



ケース3


・親クラスプロパティprivate
・子クラスプロパティprivate
→子クラスインスタンスオブジェクトプロパティを、親クラスプロパティから取得
処理の流れ
  1.$priceプロパティ … 子クラス 50(但し、親クラス内に限り100)
  2.$ko->getPrice(); … まず子クラス内でメソッドを探す
  3.存在しないので、親クラスのメソッドが実行される
  4.return $this->price; … 親クラスプロパティの100 が返る(子クラスで上書きされているが、privateが優先されるため継承されていない)
  ※親クラス内$thisから見た場合>子クラスのprivate上書きプロパティはないのと同じ(継承されずに、親クラスプロパティが優先される)
  ※親クラスのプロパティを取得しているわけではない。取得しているのは、あくまでも子クラスインスタンスオブジェクトプロパティ。ただ、参照取得する際、private優先のため、親クラスのプロパティから取得しただけ
class Oya{
   private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   private $price="50";  
}  

$ko = new Ko();//子クラスインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' .$ko->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ100



ケース4


・親クラスプロパティprivate
・子クラスプロパティprotected
→「ケース3」と同じ
class Oya{
   private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   protected $price="50";
}  

$ko = new Ko();//子クラスインスタンスオブジェクトを生成

echo '子クラスのインスタンスオブジェクトプロパティ' . $ko->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクトプロパティ100



ケース5


・親クラスプロパティprivate
・子クラスプロパティpublic
→子クラスインスタンスオブジェクトプロパティを、親クラスプロパティから取得
→子クラスインスタンスオブジェクトプロパティを、子クラスプロパティから取得
処理の流れ
  1.$priceプロパティ … 子クラス 50(但し、親クラス内に限り100)
  2.$ko->getPrice(); … まず子クラス内でメソッドを探す
  3.存在しないので、親クラスのメソッドが実行される
  4.return $this->price; … 親クラスプロパティの100 が返る(子クラスで上書きされているが、privateが優先されるため継承されていない)
  5.$ko->price … 子クラスより取得
  ※親クラス内$thisから見た場合>子クラスのprivate上書きプロパティはないのと同じ(継承されずに、親クラスプロパティが優先される)
  ※取得しているのは、あくまでも子クラスインスタンスオブジェクトプロパティ。初めに親クラスプロパティから取得した子クラスインスタンスオブジェクトプロパティを、次に子クラスプロパティから取得しただけ
class Oya{
private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
}

class Ko extends Oya{
   public $price="50"; // プロパティを新定義(上書きしているが、親クラスプロパティがprivateのため、継承されてはいない)
}

$ko = new Ko();//子クラスインスタンスオブジェクトを生成

echo '子クラスインスタンスオブジェクトプロパティ(親クラスから取得)' . $ko->getPrice(),PHP_EOL;

echo '<br />子クラスインスタンスオブジェクトプロパティ(子クラスから取得)' . $ko->price,PHP_EOL;

// 処理結果
// 子クラスインスタンスオブジェクトプロパティ(親クラスから取得)100
// 子クラスインスタンスオブジェクトプロパティ(子クラスから取得)50


P … 子クラスインスタンス生成。親クラス内での$this … 2

 閲覧数:570 投稿日:2013-11-20 更新日:2013-11-25 

概要


取得したプロパティが、クラスではなく、インスタンスオブジェクトに所属していることの確認
「プロパティ」オーバライド
・子クラスのインスタンスを生成
・親クラス内での$thisの挙動確認
→ 親クラスのプロパティがprivateかどうかで結果が異なる


ケース1


・親クラスプロパティprivate
・子クラスプロパティprivate
→子クラスインスタンスオブジェクトプロパティを、親クラスプロパティから取得
処理の流れ
  1.$priceプロパティ … 子クラス 50(但し、親クラス内に限り100)
  2.$ko->getPrice(); … まず子クラス内でメソッドを探す
  3.存在しないので、親クラスのメソッドが実行される
  4.return $this->price; … 親クラスプロパティの100 が返る(子クラスで上書きされているが、privateが優先されるため継承されていない)
  ※親クラス内$thisから見た場合>子クラスのprivate上書きプロパティはないのと同じ(継承されずに、親クラスプロパティが優先される)
  ※親クラスのプロパティを取得しているわけではない。取得しているのは、あくまでも子クラスインスタンスオブジェクトプロパティ。ただ、参照取得する際、private優先のため、親クラスのプロパティから取得しただけ
class Oya{
   private $price="100";

public function getPrice(){    // ゲッター
       return $this->price;
   }    
public function setPrice($price){    // セッター
       $this->price = $price;
   }    
}

class Ko extends Oya{
   private $price="50";  
}  

$ko1 = new Ko();//子クラスインスタンスオブジェクト1を生成
$ko2 = new Ko();//子クラスインスタンスオブジェクト2を生成

echo '<br />子クラスのインスタンスオブジェクト1プロパティ'.$ko1->getPrice(),PHP_EOL;
$ko1->setPrice(200);
echo '<br />子クラスのインスタンスオブジェクト1プロパティが、変更されたことを確認' . $ko1->getPrice(),PHP_EOL;
echo '<br />子クラスのインスタンスオブジェクト2プロパティは、変更されていないことを確認' . $ko2->getPrice(),PHP_EOL;

// 処理結果
// 子クラスのインスタンスオブジェクト1プロパティ100
// 子クラスのインスタンスオブジェクト1プロパティが、変更されたことを確認200
// 子クラスのインスタンスオブジェクト2プロパティは、変更されていないことを確認100



クラス基本用語一覧

メンバー

コメント投稿(ログインが必要)



類似度ページランキング
順位 ページタイトル抜粋
1 switch文 67
2 isset 60
3 static修飾子 43
4 setcookie関数 38
5 include_path 35
6 文字列型(string) 35
7 phpinfo 33
8 session_save_path() 33
9 Doctrine 31
10 realpath 31
11 session.hash_function 31
12 ob_start 31
13 session_start() 30
14 http_build_query 29
15 register_globals 29
16 __setメソッド 29
17 set_error_handler 27
18 session_destroy関数 27
19 Generators 27
20 preg_match 27
2023/6/04 20:56 更新
週間人気ページランキング / 5-28 → 6-3
順位 ページタイトル抜粋 アクセス数
1 ブラウザを閉じたらセッションデータはどうなるの? | セッション 34
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 14
3 スコープ | 変数 13
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 12
5 PHP用語 11
6 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 9
7 セッションID | セッション 6
7 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 6
7 コード例 … 「例外処理」はネストすることができる 6
7 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 6
7 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 6
7 PHPで定数を定義する方法は2種類ある / 配列定数の定義 6
7 Fatal error: Call to undefined method MDB2_Error::execute() in ○○ on line △△ | Fatal error(エラーメッセージ) 6
8 型の種類 | 型 5
8 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 5
8 ガベージコレクション | 機能 5
9 curl で Cookie を使用する 4
9 @ | 演算子 4
9 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 4
9 Warning: PDO::query(): LOAD DATA LOCAL INFILE forbidden | Warning(エラーメッセージ) 4
2023/6/4 1:01 更新