/** * Set the statistics operator to use. * * @param integer $name A value from the Statistics enumeration. * @throws InvalidArgumentException If $name is not a value from the Statistics enumeration. */ public function setName($name) { if (in_array($name, Statistics::asArray())) { $this->name = $name; } else { $msg = "The name argument must be a value from the Statistics enumeration, '" . $name . "' given."; throw new InvalidArgumentException($msg); } }
/** * Unmarshall a QTI statsOperator operator element into a StatsOperator object. * * @param \DOMElement The statsOperator element to unmarshall. * @param \qtism\data\QtiComponentCollection A collection containing the child Expression objects composing the Operator. * @return \qtism\data\QtiComponent A StatsOperator object. * @throws \qtism\data\storage\xml\marshalling\UnmarshallingException */ protected function unmarshallChildrenKnown(DOMElement $element, QtiComponentCollection $children) { if (($name = static::getDOMElementAttributeAs($element, 'name')) !== null) { $object = new StatsOperator($children, Statistics::getConstantByName($name)); return $object; } else { $msg = "The mandatory attribute 'name' is missing from element '" . $element->localName . "'."; throw new UnmarshallingException($msg, $element); } }
/** * Process the StatsOperator. * * @return float A single float or NULL if the sub-expression or any value contained therein is NULL. * @throws \qtism\runtime\expressions\operators\OperatorProcessingException */ public function process() { $operands = $this->getOperands(); if ($operands->containsNull() === true) { return null; } if ($operands->exclusivelyMultipleOrOrdered() === false) { $msg = "The StatsOperator operator only accepts operands with a multiple or ordered cardinality."; throw new OperatorProcessingException($msg, $this, OperatorProcessingException::WRONG_CARDINALITY); } if ($operands->exclusivelyNumeric() === false) { $msg = "The StatsOperator operator only accepts operands with a multiple or ordered cardinality."; throw new OperatorProcessingException($msg, $this, OperatorProcessingException::WRONG_BASETYPE); } $qtiFuncName = Statistics::getNameByConstant($this->getExpression()->getName()); $methodName = 'process' . ucfirst($qtiFuncName); return call_user_func_array(array($this, $methodName), array()); }
public function createFakeExpression($name) { $name = Statistics::getNameByConstant($name); return $this->createComponentFromXml(' <statsOperator name="' . $name . '"> <multiple> <baseValue baseType="integer">10</baseValue> <baseValue baseType="integer">20</baseValue> <baseValue baseType="integer">30</baseValue> </multiple> </statsOperator> '); }