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

PHP用語集

カテゴリー: クラスとオブジェクト  閲覧数:1122 配信日:2013-11-15 13:50


概要


「プロパティ」オーバライド
・子クラスのインスタンスを生成
・親クラス内での$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


週間人気ページランキング / 7-17 → 7-23
順位 ページタイトル抜粋 アクセス数
1 PHP用語 6
2 コンストラクタ デストラクタ | クラスとオブジェクト 4
2 マジックメソッド(クラスとオブジェクト) カテゴリー 4
3 ログイン 3
4 Parse error: syntax error, unexpected $end in ○○.php on line △△ | Parse error(エラーメッセージ) 2
4 PHPでcurlを使用するためには?/ 2.オプション設定 / curlでPOST送信 2
4 You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. | Twitter API(エラーメッセージ) 2
4 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 2
4 デフォルト引数 | 関数 2
4 Fatal error: Uncaught Error: Class 'Mecab_Tagger' not found in /var/www/★★.php:☆☆ | Fatal error(エラーメッセージ) 2
4 遭遇例1.存在する間違ったデータベース名を指定 2
4 リファレンス基本操作は3通り 2
5 __setメソッド | マジックメソッド(クラスとオブジェクト) 1
5 P … 子クラスインスタンス生成。親クラス内での$this 1
5 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 1
5 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 | エラーメッセージ 1
5 対応案B.文字列処理ではなく、配列処理を実施 1
5 PHPでどうしてもエラーが画面表示されない時は、HTMLコメントアウトを外してみる | エラーメッセージ 1
5 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 1
5 PECLとは? 1
2026/7/24 5:05 更新
指定期間人気ページランキング / 2020-5-28 → 2026-7-23
順位 ページタイトル抜粋 アクセス数
1 PHP用語 7335
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 2561
3 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 2522
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 1718
5 【テスト投稿】テスト | 1133
6 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 1091
7 PHPで定数を定義する方法は2種類ある / 配列定数の定義 1077
8 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 917
9 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 886
10 コード例 … 「例外処理」はネストすることができる 875
11 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 872
12 curl で Cookie を使用する 869
13 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 757
14 定数 748
15 インターフェイス | クラスとオブジェクト 706
16 Fatal error: Uncaught HeadlessChromium\Exception\OperationTimedOut: Operation timed out (3sec) in | Fatal error(エラーメッセージ) 699
17 メンバー | クラスとオブジェクト 650
18 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 649
19 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 614
19 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 614
2026/7/24 5:05 更新