1. TOPTOP
  2. Webサービス
  3. PHP

PHPでオブジェクト指向プログラミング 一応動いたが何かと問題が出た話

|

PHP

という記事を書きました。下記のコードを書いて、「一応動く(表示される)」というところまでこぎつけました。


<?php
class Saikoro {
    public $dice;

    public function __construct() {
       $this->dice = mt_rand (1, 6);
    }

    public function shake() {
       echo "サイコロの目は{$this->dice}です。";
    }
}

$p1 = new Saikoro();
$p1->shake();

$p2 = new Saikoro();
$p2->shake();

?>
サイコロの目は6です。
サイコロの目は3です。

サイコロアプリ コードの問題点

ところが、このコードでは何かと問題があるようです。以下は、Google+のプログラム質問コミュニティでいただいた問題点の指摘を要約したものです。

new演算子が2回作られてしまっている

$p1 = new Saikoro();
$p1->shake();

$p2 = new Saikoro();
$p2->shake();

このコードでは、new演算子が2回使われて、
サイコロが2個作られてしまっている。

$p = new Saikoro();
$p->shake();
$p->shake();

とするのが望ましい。

shake関数は「振る」メソッドであるのに「表示」までしている

public function shake() {
      echo "サイコロの目は{$this->dice}です。";
}

では「表示」ですね。ここは前述のコンストラクタをコメントアウトした上で

public function shake() {
      $this->dice = mt_rand (1, 6);
}

と。

コードの現状

で、結局現在、どんなコードになったかというと次のとおり。

<?php

class Saikoro {
	public $dice;

	public function shake() {
		$this->dice = mt_rand (1, 6);
	}
}

$p = new Saikoro();
$p->shake();
$p->shake();

実行すると、何も表示されない…。2回の乱数表示がなされると思ったんですが…。もう一度オブジェクト指向関連の書籍で、実装の仕方を勉強しなおしてみます。