- array_shift: documentation ( source)
- array_filter: documentation ( source)
<?php
interface Additive
{
public function getSigma($rSigma);
}
class Sigma
{
protected $_fValue = null;
public function __construct($fValue)
{
$this->_fValue = (double)$fValue;
}
public static function __callStatic($sName, $rgArgs)
{
if(count($rgArgs)!=count(array_filter($rgArgs, function($mArg)
{
return is_object($mArg) && $mArg instanceof self;
})))
{
throw new Exception('Can not call method "'.$sName.'": invalid arguments');
}
if(!count($rgArgs))
{
return null;
}
$rResult = array_shift($rgArgs);
foreach($rgArgs as $mArg)
{
$rResult = $rResult->$sName($mArg);
}
return $rResult;
}
public function getValue()
{
return $this->_fValue;
}
public function getSigma($rSigma)
{
return new self($this->getValue()+$rSigma->getValue());
}
}