$this

クラスとオブジェクト

$thisとは?

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

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

 閲覧数:814 投稿日: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

 閲覧数:767 投稿日: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

 閲覧数:821 投稿日: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

 閲覧数:699 投稿日: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 $this 100
2 switch文 67
3 isset 60
4 static修飾子 43
5 setcookie関数 38
6 文字列型(string) 35
7 include_path 35
8 session_save_path() 33
9 phpinfo 33
10 Doctrine 31
11 ob_start 31
12 session.hash_function 31
13 realpath 31
14 session_start() 30
15 register_globals 29
16 __setメソッド 29
17 http_build_query 29
18 set_error_handler 27
19 session_destroy関数 27
20 Generators 27
2024/4/26 9:27 更新
週間人気ページランキング / 4-19 → 4-25
順位 ページタイトル抜粋 アクセス数
1 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 16
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 11
3 PHPで定数を定義する方法は2種類ある / 配列定数の定義 7
4 コード例 … 「例外処理」はネストすることができる 6
4 curl で Cookie を使用する 6
5 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 5
6 ブラウザを閉じたらセッションデータはどうなるの? | セッション 4
6 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 4
7 Fatal error: Call to undefined method MDB2_Error::execute() in ○○ on line △△ | Fatal error(エラーメッセージ) 3
7 Fatal error: Uncaught Error: Class 'Mecab_Tagger' not found in /var/www/★★.php:☆☆ | Fatal error(エラーメッセージ) 3
7 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 3
7 型の種類 | 型 3
7 or(||) | 演算子 3
7 セッション名 | セッション 3
7 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 3
7 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 3
7 Composer | 依存関係マネージャ 3
8 Cookie / Cookieとは? / Cookie仕様 2
8 セッションCookie | クッキー 2
8 Fatal error: Uncaught Wrench\Exception\HandshakeException: No accept header receieved on handshake response in ★★★ headless-chromium-php/vendor/wrench/wrench/lib/Wrench/Protocol/Protocol.php | エラーメッセージ 2
2024/4/26 1:02 更新