Я думаю, это то, что вы ищете:
Калькулятор класса
<?php
/**
* Calculator class
*/
class Calculator
{
const min = 0;
const max = 1000;
/**
* Calculate the summation
* @param Array $number
* @return integer
*/
public static function add( $numbers ){
return array_sum( self::_filter_numbers( $numbers ) );
}
/**
* Substract numbers
* @param Array $numbers
* @return integer
*/
public static function subtract( $numbers ){
$filtered_numbers = self::_filter_numbers( $numbers );
$first_number = array_shift( $filtered_numbers );
return ( $first_number - array_sum( $filtered_numbers ) );
}
/**
* Calculate the product of the given numbers
* @param Array $numbers
* @return integer
*/
public static function multiply( $numbers ){
return array_product( self::_filter_numbers( $numbers ) );
}
/**
* Divide the given numbers
* @param Array $numbers
* @return double
*/
public static function divide( $numbers ){
$filtered_numbers = self::_filter_numbers( $numbers );
$first_number = array_shift( $filtered_numbers );
return ($first_number / array_product( $filtered_numbers ));
}
/**
* Filter Invalid numbers
* @param Array $numbers
* @return Array Valid Numbers
*/
private static function _filter_numbers( $numbers ){
return array_filter( $numbers, function( $number ){
return self::_is_valid_number( $number );
} );
}
/**
* Check if the given number is in the interval [0, 1000]
* @param integer $number
* @return boolean
*/
private static function _is_valid_number( $number ){
return ( $number >= self::min && $number <= self::max );
}
}
Тесты
$test_numbers_1 = [ -2, -1, 0, 1, 2, 1000, 2000 ];
printf( "<h4>Test 1</h4>\n" );
printf( "<p>Numbers: %s</p>\n", implode( ',', $test_numbers_1 ) );
printf( "<p>Add: %d</p>\n", Calculator::add( $test_numbers_1 ) );
printf( "<p>Substract: %d</p>\n", Calculator::subtract( $test_numbers_1 ) );
printf( "<p>Multiply: %d</p>\n", Calculator::multiply( $test_numbers_1 ) );
printf( "<p>Divide: %f</p>\n", Calculator::divide( $test_numbers_1 ) );
$test_numbers_1 = [ -2, -1, 1, 2, 1000, 2000 ];
printf( "<h4>Test 2</h4>\n" );
printf( "<p>Numbers: %s</p>\n", implode( ',', $test_numbers_1 ) );
printf( "<p>Add: %d</p>\n", Calculator::add( $test_numbers_1 ) );
printf( "<p>Substract: %d</p>\n", Calculator::subtract( $test_numbers_1 ) );
printf( "<p>Multiply: %d</p>\n", Calculator::multiply( $test_numbers_1 ) );
printf( "<p>Divide: %f</p>\n", Calculator::divide( $test_numbers_1 ) );
Результаты испытаний
<h4>Test 1</h4>
<p>Numbers: -2,-1,0,1,2,1000,2000</p>
<p>Add: 1003</p>
<p>Substract: -1003</p>
<p>Multiply: 0</p>
<p>Divide: 0.000000</p>
<h4>Test 2</h4>
<p>Numbers: -2,-1,1,2,1000,2000</p>
<p>Add: 1003</p>
<p>Substract: -1001</p>
<p>Multiply: 2000</p>
<p>Divide: 0.000500</p>