PHP Classes

File: public/Classes/Operationen/Klammer.php

Recommend this page to a friend!
  Classes of stefan   PHP Calculator   public/Classes/Operationen/Klammer.php   Download  
File: public/Classes/Operationen/Klammer.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Calculator
Calculate the result of multiple math operations
Author: By
Last change: correct tan and paranthese
Date: 2 years ago
Size: 2,171 bytes
 

Contents

Class file image Download
<?php
   
namespace 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;
        }
    }
?>