Files
nette_calculator/app/model/CalculatorManager.php
T
2019-04-04 18:34:40 +02:00

128 lines
3.5 KiB
PHP

<?php
/*
MODEL
// kalkulačka
// 4 základní operace
//tj. sčítání, odčítání, násobení a dělení
//trida CalculatorManager (class)
//1. pouziva php trait Nette/SmartObject ()
//TRAITS: mechanism for code reuse in single inheritance
//intended to reduce some limitations of single inheritance
//by enabling a developer to reuse sets of methods freely in
//several independent classes living in different class hierarchies
//*similar to a class,but only intended to group functionality in a fine-grained and consistent way
//e.g:
/*
trait ezcReflectionReturnInfo {
function getReturnType() { }
function getReturnDescription() { }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
}
//2. definuje 4 operace: sčítání, odčítání, násobení a dělení
*/
namespace App\Model;
use Nette\SmartObject;
/**
* Model operací kalkulačky.
* @package App\Model
*/
class CalculatorManager{
use SmartObject;
/** Definice konstant pro operace. */
const
ADD = 1,
SUBTRACT = 2,
MULTIPLY = 3,
DIVIDE = 4;
/**
* Getter pro existující operace.
* @return array asociativní pole konstant pro operace a jejich slovního pojmenování
*/
public function getOperations(){
return array(
self::ADD => 'Sčítání',
self::SUBTRACT => 'Odčítání',
self::MULTIPLY => 'Násobení',
self::DIVIDE => 'Dělení'
);
}
/**
* Zavolá zadanou operaci a vrátí její výsledek.
* @param int $operation zadaná operace
* @param int $x první číslo pro operaci
* @param int $y druhé číslo pro operaci
* @return int|null výsledek operace nebo null, pokud zadaná operace neexistuje
*/
public function calculate($operation, $x, $y){
switch ($operation) {
case self::ADD:
return $this->add($x, $y);
case self::SUBTRACT:
return $this->subtract($x, $y);
case self::MULTIPLY:
return $this->multiply($x, $y);
case self::DIVIDE:
return $this->divide($x, $y);
default:
return null;
}
}
/**
* Sečte daná čísla a vrátí výsledek.
* @param int $x první číslo
* @param int $y druhé číslo
* @return int výsledek po sčítání
*/
public function add($x, $y){
return $x + $y;
}
/**
* Odečte druhé číslo od prvního a vrátí výsledek.
* @param int $x první číslo
* @param int $y druhé číslo
* @return int výsledek po odčítání
*/
public function subtract($x, $y)
{
return $x - $y;
}
/**
* Vynásobí daná čísla a vrátí výsledek.
* @param int $x první číslo
* @param int $y druhé číslo
* @return int výsledek po násobení
*/
public function multiply($x, $y)
{
return $x * $y;
}
/**
* Vydělí první číslo druhým bezezbytku a vrátí výsledek.
* @param int $x první číslo
* @param int $y druhé číslo; nesmí být 0
* @return int výsledek po dělení bezezbytku
*/
public function divide($x, $y)
{
return round($x / $y);
}
}