<?php class Complex { private $realPart = 0; private $imaginaryPart = 0; private $suffix = 'i'; public static function _parseComplex($complexNumber) { $complexNumber = (string) $complexNumber; $validComplex = preg_match('/^([-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)([-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)?(([-+]?)([ij]?))$/ui',$complexNumber,$complexParts); if (!$validComplex) { return array( $complexNumber, 0, '' ); } if (($complexParts[4] === '') && ($complexParts[9] !== '')) { $complexParts[4] = $complexParts[8] . 1; } return array( (float) $complexParts[1], (float) $complexParts[4], $complexParts[9] ); } // function _parseComplex() public function __construct($realPart, $imaginaryPart = null, $suffix = null) { if ($imaginaryPart === null) { if (is_array($realPart)) { list ($realPart, $imaginaryPart, $suffix) = $realPart; } elseif((is_string($realPart)) || (is_numeric($realPart))) { list ($realPart, $imaginaryPart, $suffix) = self::_parseComplex($realPart); } } $this->realPart = $realPart; $this->imaginaryPart = $imaginaryPart; $this->suffix = strtolower($suffix); } public function getReal() { return $this->realPart; } public function getImaginary() { return $this->imaginaryPart; } public function getSuffix() { return $this->suffix; } public function __toString() { $str = ""; if ($this->imaginaryPart != 0.0) $str .= $this->imaginaryPart . $this->suffix; if ($this->realPart != 0.0) { if ($str) $str = "+" . $str; $str = $this->realPart . $str; } if (!$str) $str = "0"; return $str; } }