前提・実現したいこと
現在PHPで作成するクラスの設計を行っています。
1日の実績データを扱うクラス(仮にdailyClass)を使って月毎のデータを扱うクラス(仮にmonthlyClass)を作成する場合、
monthlyClass内で日付の数分のdailyClassオブジェクトを作成する想定で考えているのですが、
保持している値だけが異なるdailyClassオブジェクトを30個も作ることによって、メモリリソースが食われるのは如何なものかと考えています。
そこで皆さんに質問したいのですが、以下のようなコードの場合、リソース削減のために考えられる事としてどういったものが挙げられるでしょうか?
また、PHPの内部仕様によって、実質メモリ量を削減する仕組みになっているといった事があればご教授いただけますと幸いです。
曖昧な質問になってしまい申し訳ありませんが、よろしくお願いします。
該当のソースコード(上記を元に仮作成したもの)
<?php // 日毎のデータを作成するクラス class dailyClass{ private $date; private $result; function __construct( $Ymd ){ $this->date = $Ymd; $this->setDayResult(); } // 実際にはデータベースより取得したデータから計算、整形した配列データが返る function setDayResult(){ // $this->result = $dbObj->get( $this->date ); $this->result = rand(1,100); } function getResult(){ return $this->result; } } // 日毎のデータを元に月毎のデータを作成するクラス class monthlyClass{ private $date; private $result; function __construct( $date ){ $this->date = $date; $dateTs = strtotime($date); $lastDay = date( 't' , $dateTs ); // ここで1月分のオブジェクトを作成する -- 懸念しているポイント -- for( $i = 1 ; $i <= $lastDay ; $i++ ){ $getDate = date('Y/m/d' , strtotime( sprintf('+%d day' , $i -1 ) , $dateTs ) ); $this->result[$i] = new dailyClass( $getDate ); } } // dailyClassオブジェクトのresultを1ヶ月分合算して返すメソッド function getTotal(){ $result = 0; foreach( $this->result as $daily ){ $result += $daily->getResult(); } return $result; } } $startDate = '2019/05/01'; $obj = new monthlyClass( $startDate ); $result = $obj->getTotal(); // 最終的に取得したい値 var_dump($result);
補足情報
開発環境では、PHP5.3を使っているため、無名クラスなど一部使えない構文があります。
今回の例題に絡めてバージョンアップするべき理由等もあれば幸いです。
上記のプログラムは、出退勤のシステムを構築するための仕組みです。
日々打刻される入出、退出の時間に基づき、1日の所定労働時間、時間外労働時間等を算出します。
そのデータを1月分で合算して実績として出力するという考えです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/02 09:23