Algorithm - 0と1を次々と返す簡単なお仕事 - php版
Algorithm - 0と1を次々と返す簡単なお仕事
なんとなくphpでも。
あんまりおもしろくないかな。
<?php function flipflop() { static $flipflop = false; $flipflop = !$flipflop; return $flipflop; } function printTrueOrFalse($p) { $str = $p ? "True\n" : "False\n"; echo $str; } echo "関数版\n"; printTrueOrFalse(flipflop()); printTrueOrFalse(flipflop()); printTrueOrFalse(flipflop()); printTrueOrFalse(flipflop()); class flipflop { private $p = false; public function next() { $this->p = !$this->p; return $this->p; } } $flfp = new flipflop(); echo "クラス版\n"; printTrueOrFalse($flfp->next()); printTrueOrFalse($flfp->next()); printTrueOrFalse($flfp->next()); printTrueOrFalse($flfp->next()); ?>
でtest.phpとかで保存して実行。
$ php test3.php 関数版 True False True False クラス版 True False True False
2010/09/04追記
今朝見たら、元記事へのトラックバックの0と1を次々と返す簡単なお仕事を考えてみた - なげっぱなし日誌でphpで無名関数使ったやり方が出てましたね。
そっかぁ、いつの間にかphpもこんなことになってたんだなぁ。
ということで、PHP 5.3の新機能と変更点:第2回 クロージャとgoto文 |gihyo.jp … 技術評論社辺りを参考にして、自分でもやってみる。
<?php $make_flipflop = function ($p = false) { return function () use (&$p) { $p = !$p; return $p; }; }; function printTrueOrFalse($p) { $str = $p ? "True\n" : "False\n"; echo $str; } $flfp = $make_flipflop(); printTrueOrFalse($flfp()); printTrueOrFalse($flfp()); printTrueOrFalse($flfp()); printTrueOrFalse($flfp()); ?>
実行
$ php test.php True False True False
へー。