$this

クラスとオブジェクト

$thisとは?

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

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

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

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

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

 閲覧数:822 投稿日: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
2025/2/06 11:52 更新
週間人気ページランキング / 1-30 → 2-5
順位 ページタイトル抜粋 アクセス数
1 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 10
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 9
3 curl で Cookie を使用する 4
3 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 4
3 PHPで定数を定義する方法は2種類ある / 配列定数の定義 4
4 コード例 … 「例外処理」はネストすることができる 3
4 Warning: PDO::query(): LOAD DATA LOCAL INFILE forbidden | Warning(エラーメッセージ) 3
4 http_build_queryとは? / 構文 /パラメータ 3
4 Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting | エラーメッセージ 3
5 Fatal error: Cannot redeclare 関数名() (previously declared in ファイル名:○○) in ファイル名 | Fatal error(エラーメッセージ) 2
5 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'データベースユーザー名'@'localhost' (using password: YES)' | phpMyAdmin(データベース関連) 2
5 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
5 new clone違い | 演算子 2
5 オブジェクト関係マッピング | データベース関連 2
5 array_filter | 配列 2
6 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 1
6 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 1
6 セッション単位 | セッション 1
6 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 1
6 dirname() / (__FILE__ ) / basename( dirname( __FILE__ ) ); | 関数 1
2025/2/6 1:02 更新