| 
<?phpnamespace Taschenrechner\Classes\Operationen;
 use Taschenrechner\Classes\Calculator;
 use Taschenrechner\Classes\Concatinator;
 
 class Klammer extends Operation {
 //Gibt das Zeichen für die Operation zurück
 public function getSign() {
 return "(";
 }
 public function calculate($a, $b=NULL) {
 return NULL;
 }
 public function findAndCalculateTerm($term, $operations) {
 //breche den Term in ein Array auf
 $array = preg_split('/(?<!^)(?!$)/u', $term );
 //Füge alle aufeinander folgenden Zahlen zusammen
 $array = (new Concatinator())->concatinateArray($array, $operations);
 
 //Sucht nach einer Klammer
 $klammer_zu_gefunden = false;
 $getLastParanthese = false;
 $klammer_auf = -1;
 $klammer_zu = -1;
 $term2="";
 
 for($i =0; $i< sizeof($array); $i++) {
 
 //Wenn die Klammer gefunden wurde, dann speichere die Klammer
 //und suche nach der schließenden Klammer
 if($array[$i] == $this->getSign()) {
 $klammer_auf = $i;
 if($i==0) {
 }else if(is_numeric($array[$i-1])) {
 throw new \Exception("Bitte einen gültigen Term eingeben");
 }
 for($s = $i+1; $s < sizeof($array); $s++) {
 if($array[$s]==$this->getSign()) {
 $getLastParanthese=true;
 }
 if($array[$s]==")") {
 $klammer_zu = $s;
 $klammer_zu_gefunden=true;
 if($getLastParanthese==false) {
 break;
 }
 }
 }
 if($klammer_zu_gefunden == false) {
 throw new \Exception("Es fehlt eine schließende Klammer");
 }
 //Speichere den internen Ausdruck in einen Term
 for($s=$klammer_auf+1; $s < $klammer_zu; $s++) {
 $term2.=$array[$s];
 }
 //var_dump($term2);
 //Erzeuge einen neuen Term
 
 
 //Lösche die öffnende und schließende Klammer
 for($i=$klammer_auf+1; $i<=$klammer_zu; $i++) {
 unset($array[$i]);
 }
 //gebe das Ergebnis
 //zurück
 $array[$klammer_auf] = $this->calculator->calculate($term2);
 $array = array_values($array);
 $term = implode("", $array);
 
 return $term;
 
 }
 
 }
 
 $term = implode("", $array);
 return $term;
 }
 }
 ?>
 |