БлогNot. PHP: простой класс-сумматор

PHP: простой класс-сумматор

Пример того, как обрабатывать методом класса любое количество аргументов (метод plus), различать аргументы-числа и строки (конструктор и тот же метод), выводить данные по формату, заданному свойством класса.

Проверено в XAMPP с PHP 7.3.3.

Хорошее задание по теме - "написать маленький класс, делающий что-нибудь полезное".

<?php
 class Summa { //Простой класс-сумматор
  private $sum,$cnt,$fmt="%.3F";
   //Формат - как у функции sprintf:
   //https://www.php.net/manual/ru/function.sprintf.php
  
  function __construct ($sum='') { 
   $this->sum = (is_numeric($sum) ? $sum : 0);
   $this->cnt = (is_numeric($sum) ? 1 : 0); 
  }
  
  function plus() { //Количество аргументов функции - любое
   $numargs = func_num_args(); 
   $arglist = func_get_args();
   for ($i=0; $i<$numargs; $i++) 
	if (is_numeric($arglist[$i])) {
	 $this->sum += $arglist[$i];
     $this->cnt ++;
    }
  }
  
  function summa() { return $this->sum; }
  
  function count() { return $this->cnt; }
  
  function average() { return $this->sum/$this->cnt; }
  
  function setFormat ($fmt) { $this->fmt = $fmt; }
  
  function format($s) { return sprintf ($this->fmt,$s); }
 } //end of class Summa
 
 //Проверка возможностей класса:
 $s = new Summa(); //Сумма и количество инициализируются нулями
 $s->setFormat ('%.2F');
 $s->plus(1,2,'test'); 
 $s->plus(3,4);
 echo 'Sum(s)='.$s->format($s->summa()).
    ', Avg(s)='.$s->format($s->average()).
    ', Cnt(s)='.$s->count(); //10.00, 2.50, 4
 $d = new Summa(0); //"0" посчитается как число!
 $d->plus(1);
 echo '<br>Avg(d)='.$d->format($d->average()); //0.500
?>

теги: php учебное программирование

01.04.2019, 12:53; рейтинг: 139