アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.phpbook.jp/tutorial/member/index4.htmlに下記のオブジェクト指向を含んだスクリプトがありました。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$tv = new Television();

$tv->setChannel(20);
print('現在のチャンネルは'.$tv->getChannel().'<br>');

$tv->setChannel(10);
print('現在のチャンネルは'.$tv->getChannel().'<br>');

class Television{
private $channelNo = 8;

function setChannel($channel){
if (($channel >= 1) and ($channel <= 12)){
$this->channelNo = $channel;
}else{
print('チャンネルは1から12の間で設定して下さい<br>');
}
}

function getChannel(){
return $this->channelNo;
}
}

?>
</body>
</html>

これをブラウザ経由でみますと、
「チャンネルは1から12の間で設定して下さい
現在のチャンネルは8
現在のチャンネルは10」
と表示されます。
なぜ、この順番で表示されるのでしょうか?
個人的には、$tv->setChannel(20)の次に$tv->setChannel(10)の処理をしますので、
「チャンネルは1から12の間で設定して下さい
現在のチャンネルは10
現在のチャンネルは8」
の順番ではないかと思っております。
もしよろしければ、教えてください。お願いします。

A 回答 (2件)

> $tv->setChannel(20);


としても
> if (($channel >= 1) and ($channel <= 12)){
> $this->channelNo = $channel;
のところではじかれるからです。
    • good
    • 0

class の中のメンバ変数の宣言コード ( private $channelNo = 8; )


は、その class が new されたとき ( $tv = new Television(); ) に
実行されます。

従って、実際の実行順序は

 1. $tv = new Television();
  → このときに private $channelNo = 8; が実行される

 2. $tv->setChannel(20);
  → このときに function setChannel メソッド内が実行される
  → "チャンネルは1から12の間で設定して下さい" を表示

 3. print('現在のチャンネルは'.$tv->getChannel().'<br>');
  → このときに function getChannel メソッド内が実行される
    (結果は、1.で設定した 8 が返る)
  → "現在のチャンネルは8" を表示

 (以下略)

ですね。

この回答への補足

値をそれぞれ
「$tv->setChannel(4);
$tv->setChannel(20);」
に変更すると
ブラウザ上では、
「現在のチャンネルは4
チャンネルは1から12の間で設定して下さい
現在のチャンネルは4」
と表示され、「8」が表示されません。
これは、1度目の処理で、
private $channelNo = 8;
の8が4に変更されたからなのでしょうか?
続けてのご質問してしまい申し訳ございません。

補足日時:2011/08/21 21:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!