質問編集履歴

1 仕様の補足追加

aaiau

aaiau score 11

2019/05/02 18:24  投稿

PHPにおけるリソースの削減を意識したオブジェクトの作り方
### 前提・実現したいこと
現在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月分で合算して実績として出力するという考えです。
  • PHP

    33672 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • オブジェクト

    319 questions

    オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る