人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

オブジェクト指向におけるFizzBuzz問題
http://blogs.wankuma.com/episteme/archive/2007/11/08/106927.aspx

これのPHP(5.2系)での問題と模範解答を挙げてください。
移植に留まらない問題の変更もOKです。

●質問者: FnuLnu
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:FizzBuzz問題 PHP まら オブジェクト指向 移植
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● heppokoA
●35ポイント

こんな感じでしょうか。

問題は同じで。

<?php

abstract class Animal
{
 protected $count = 1;
 protected $word = "";
 
 public function Sound()
 {
 print str_repeat($this->word, $this->count)."\n";
 }
 
 public function SetCount($pCount)
 {
 $this->count = (int)$pCount;
 }
}

class Dog extends Animal
{
 public function Dog()
 {
 $this->word = "わん";
 }
}

class Cat extends Animal
{
 public function Cat()
 {
 $this->word = "にゃー";
 }
}

class Program
{
 public static function Main()
 {
 $animal = new Dog();
 $animal->Sound();
 $animal->SetCount(3);
 $animal->Sound();
 $animal = new Cat();
 $animal->Sound();
 }
}

Program::Main();

?>

出力は,

わん
わんわんわん
にゃー

となります。

◎質問者からの返答

綺麗な回答ありがとうございます。

個人的にはコンストラクタの書き方について、

まだPHP4スタイルで書くかPHP5スタイルで書くか悩みます。

もう一年も立てば状況も変わるんでしょうが。

str_repeatの存在は初めて知りました。


2 ● Aileron
●35ポイント

heppokoA さんのコードと似たり寄ったりだけれども。

鳴かない動物にも対応してスモールトーク風味な記述にしてみた。

<?php
abstract class Animal
{
 private $count = 1;

 public function sound()
 {
 for ($i=0;$i<$this->count;$i++)
 {
 $message .= $this->cry();
 }
 print $message."\n";
 return $this;
 }

 public function setCount($count)
 {
 $this->count = (int)$count;
 return $this;
 }

 protected abstract function cry();
}

class Dog extends Animal
{
 protected function cry()
 {
 return "わん";
 }
}

class Cat extends Animal
{
 protected function cry()
 {
 return "にゃー";
 }
}

class NoCryException extends Exception
{

}

class Sloth extends Animal
{
 protected function cry()
 {
 throw new NoCryException();
 }
}

class Main
{
 public static function main()
 {
 $dog = new Dog();
 $dog->sound()->setCount(3)->sound();

 $cat = new Cat();
 $cat->sound();

 $sloth = new Sloth();
 $sloth->sound();
 }
}
Program::main();
?>
|php|<
◎質問者からの返答

返り値をオブジェクトにする事でこういう書き方も出来るんですね。

面白いです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ