Tom: Seltsamer Bug in der Klasse?

Beitrag lesen

Hello @all,

es steckt ein ganz merkwürdiger Fehler in der Applikation / Klasse, den ich nicht nachvollziehen kann, der aber sowohl auf meinem lokalen LAMPP, als auch auf dem öffetnlich zugänglichen Debian_4.0 auftritt.

gibt man die Aufgabe "e^pi" ein, so kommt in der normalen Verwendung der Klasse

Undefined operator 'e^pi'

ändere in in der Operatorenliste das 'exp' zu 'axp' oder das 'e' zu 'o' und benutze dann den Operator entsprechend, dann funktioniert es; genauso, wenn ich 'exp' auskommentiere.

Ich habe das soweit debugged, wie ich konnte und musste feststellen, dass die Funktion

array_key_exists('e', $_operation)     ### vereinfacht dargestellt

nicht wie erwartet arbeitet.

private $_operation = array (
        '('    => array ('left bracket', 0),
        ')'    => array ('right bracket', 1),
        '+'    => array ('sum', 1, 2, '_sum'),
        '-'    => array ('difference', 1, 2, '_difference'),
        '*'    => array ('multiplication', 2, 2, '_multiplication'),
        '/'    => array ('division', 2, 2, '_division'),
        'r'    => array ('root', 3, 2, '_root'),
        '^'    => array ('power', 3, 2, '_power'),
        'sin'  => array ('sine', 3, 1, '_sin'),
        'cos'  => array ('cosine', 3, 1, '_cos'),
        'tan'  => array ('tangent', 3, 1, '_tan'),
        'asin' => array ('asine', 3, 1, '_asin'),
        'acos' => array ('acosine', 3, 1, '_acos'),
        'atan' => array ('atangent', 3, 1, '_atan'),
        'sqrt' => array ('square root', 3, 1, '_sqrt'),
#        'exp'  => array ('power of e', 3, 1, '_exp'),
        'log'  => array ('logarithm', 3, 1, '_log'),
        'ln'   => array ('natural logarithm', 3, 1, '_ln'),
        'E'    => array ('power of 10', 3, 1, '_E'),
        'abs'  => array ('absolute value', 3, 1, '_abs'),
        '!'    => array ('factorial', 3, 1, '_factorial'),
        'pi'   => array ('value of pi', 4, 0, '_const_pi'),
        'e'    => array ('value of e', 4, 0, '_const_e'),
        'mod'  => array ('modulo', 3, 2, '_mod'),
        'div'  => array ('integer division', 3, 2, '_div')
    );

Ich habe dann versucht, das Problem zu isolieren, aber da ist es nicht reproduzierbar.
Hier funktioniert es, wie gedacht.

<?php   ### array_key_exists.php ###

Test, ob Funktion buggy ist. e, exp

header('Content-Type: text/plain');

class buggy
{
    public $_stack = array(

'amp'   => '0-amp',
         'alles' => '1-alles',
         'a'     => '2-a',
         'bau'   => '3-bau',
         'exp'   => '4-exp',
         'b'     => '5-b',
         'c'     => '6-c',
         'cut'   => '7-cut',
         'e'     => '8-e',
    );

function checkit()
    {
        echo "b: ";
        if (array_key_exists('b', $this->_stack)) echo "found\r\n";
        echo "a: ";
        if (array_key_exists('a', $this->_stack)) echo "found\r\n";
        echo "c: ";
        if (array_key_exists('c', $this->_stack)) echo "found\r\n";
        echo "e: ";
        if (array_key_exists('e', $this->_stack)) echo "found\r\n";
    }
}

$test = new buggy();
$test->checkit();

?>

Hat einer 'ne Idee?

Das Script und die Klasse ist unter http://selfhtml.bitworks.de/snippets/calculator/ auch downloadbar. Wäre nett, wenn sich das noch mal jemand anders angucken könnte.

Ich muss da doch irgendwas übersehen haben.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de