71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?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; | ||
|  | 	} | ||
|  | 
 | ||
|  | } |