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」
の順番ではないかと思っております。
もしよろしければ、教えてください。お願いします。
No.2ベストアンサー
- 回答日時:
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に変更されたからなのでしょうか?
続けてのご質問してしまい申し訳ございません。
No.1
- 回答日時:
> $tv->setChannel(20);
としても
> if (($channel >= 1) and ($channel <= 12)){
> $this->channelNo = $channel;
のところではじかれるからです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヒアドキュメントでstaticメン...
-
POSTされたかどうか確かめる方...
-
<A href ~で複数の値を渡したい
-
10*10行の表をforループで...
-
flush()関数でページを徐々に表...
-
ヒアドキュメントの中で関数の実行
-
Google chart API 、PHP、MySQL...
-
変数 $x=1と$y=1 参考書は間違...
-
データ)表示件数について
-
Dosブロンプトでtabを出力したい
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
wordの差し込み印刷で文字...
-
findstrのerrorlevel
-
【C#】DataGridViewの最大列数...
-
phpでcookieがうまく保存されない
-
[C++]std:mapの扱いを教えて頂...
-
「取得先」という表現について
-
VB6.0とスプレッドシート
-
どういうプログラムを関数化を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
テーブルに送信ボタンをつける
-
if文の複数条件。
-
「次の10件を表示する」のよ...
-
microtime関数は、結構イイカゲ...
-
PHPでwait処理ってできます?
-
vbYesNoの使い方
-
逆順表示したい?
-
$_SERVER["QUERY_STRING"]の仕...
-
POSTされたかどうか確かめる方...
-
日付を基にした乱数生成
-
五十音表示したいのですが、SQL...
-
ヒアドキュメントでstaticメン...
-
Luaにて、and or の組み合わせ...
-
<python>戻り値
-
関数の実行ができません
-
PHPで変数についての質問です
-
PHP ハイパーリンク
-
重い処理の最中の経過を出力したい
-
foreachで無限ループ?
おすすめ情報