Funktion wird nicht gefunden, obwohl vorhanden

stamp000

Mitglied
Hallo,
also ich habe in etwas merkwürdiges Problem. Ich versuche das Programm horde (http://www.horde.org) auf einem Server zum Laufen zu bekommen.

Dabei bin ich auf einige Probleme gestoßen. Aktuell geht es um folgendes Phänomen:

In der Unteren Datei steht folgender Code: Allerdings findet er keine Funktion innerhalb der Datei, um dies zu Testen, habe ich eine Funktion "textausgabe()" definiert und innerhalb einer anderen plaziert. Siehe hier:

Code:
    function IMP_Template($basepath = null)
    {
	print textausgabe();                                 //<- im Programm Zeile 111
        if (!is_null($basepath)) {
            $this->_basepath = $basepath;
        }

        require_once 'Horde/Cache.php';
        $this->_cache = &Horde_Cache::singleton($GLOBALS['conf']['cache']['driver'], Horde::getDriverConfig('cache', $GLOBALS['conf']['cache']['driver']));
    }

    /**
     * Sets an option.
     * Currently available options are:
     * <pre>
     * 'debug' - Output debugging information to screen
     * 'forcecompile' - Force a compilation on every page load
     * 'gettext' - Activate gettext detection
     * <pre>
     *
     * @param string $option  The option name.
     * @param mixed $val      The option's value.
     */
    function setOption($option, $val)
    {
        $this->_options[$option] = $val;
    }
	function textausgabe (){
	return 'TEXT';
	}

Im Browser erscheint dann folgendes:
Code:
Fatal error: Call to undefined function: textausgabe() in /hp/av/ac/ii/www/privat/horde/imp/lib/Template.php on line 111

Also ich vermute mal, dass es nicht an dem Code liegt, sondern irgendwie an PHP oder sonstigen Servereinstellungen. Also mir ist das ganze etwas scheleierhaft. Hat irgendjemand schonmal ein ähnliche Phänomen gehabt?

Eine Fehlermeldung kommt nicht nur bei dieser Funktion! egal welche Funktion aufgerufen werden soll, bei jeder erscheint eine entsprechende Fehlermeldung
 
Zuletzt bearbeitet:
äm was meinst du mit "definiert" ? Also die Funktion ist wie folgt definiert;

Code:
	function textausgabe (){
	return 'TEXT';
	}

oder muss man in php einer Klasse nochmals "sagen" welche funktionen sie hat?
Es liegt ja auch nicht nur an der Funktion "textausgabe" auch die Funtkionen "get und set" (darum geht es eigentlich) werden nicht gefunden.
 
ich habe gefragt WO diese Funktion deffiniert ist, und nicht wie ;)

Ich schließe mal aus deiner Antwort, dass die Funktion in der selben Klasse deffiniert ist.

dann musst du sie mit $this->textausgabe(); aufrufen.
 
äm was meinst du mit "definiert" ? Also die Funktion ist wie folgt definiert;

Was er damit sagen will du hast keine funktion textausgabe in der function IMP_Template definiert.

Daher kennt deine Funktion sie auch nicht. Selbiges gilt übrings auch für Variablen.
Funktionen kennen nur das was innerhalb der Funktion ist. Alles was aussen irgendwann mal geschrieben wurde kennt also deine Funktion nicht!

Das hat nix mit php oder Server einstellungen zu tun sondern ist ein typischer Programmier fehler.

Wenn man nun doch noch auf äusere Elemente zugreiffen will kann man das Schlüsselwort global verwenden.
Wird aber nicht Empfohlen ist eher so eine Notlösung wens wirklich nicht anderes geht.

Mfg Splasch
 
Was er damit sagen will du hast keine funktion textausgabe in der function IMP_Template definiert.

Daher kenn sie deine Funktion auch nicht. Selbiges gilt übrings auch für Variablen.
Funktionen kennen nur das was innerhalb der funktion ist. Alles was aussen irgendwann mal geschrieben wurde kennt also deine Funktion nicht!

Das hat nix mit php oder Server einstellungen zu tun sondern ist ein typischer Programmier fehler.

Wenn man nun doch noch auf äusere elemente zugreiffen will kann man das Schlüssel wort global verwenden.
Wird aber nicht empfohlen ist eher so eine notlösung wens wirklich nicht anderes geht.

Mfg Splasch

Das "definiert" hat sich auf meine Post, etwas weiter oben bezogen. Er hat ja seine Funktion bereits geschrieben. Ich wollte nur wissen wo sie denn niedergeschrieben ist, das hat er leider nicht ganz verstanden (hab mich wahrscheinlich einfach schlecht ausgedrückt ^^) , und dann wollte er halt wissen was ich mit "defniert" meine.
Wo definiert? -> Wo steht denn die Funktion, in welcher Datei und wo genau in dieser Datei =)
 
hmm ok, soweit habe ich das verstanden. Meine Funktion wird jetzt auch aufgerufen.
Aber das eigentliche Problem besteht noch. Ich poste jetzt mal die komplette datei "Template.php" (wie gesagt, diese Datei stammt nicht von mir, sondern aus dem Projekt "horde" ich habe diese Funktion "Testausgabe" nur mal zum testen reingeschrieben.

Hauptproblem betrifft die Aufrufe der beiden Funktionen "get" und "set" aus dem folgenden Code:

Code:
if (!$force && is_null($this->_template) && isset($this->_cache)) {
            $this->_template = $this->_cache->get($cacheid, 0);
            if ($this->_template === false) {
                $this->_template = null;
            }
        }
Fehler:

Code:
Fatal error: Call to undefined function: get() in /hp/av/ac/ii/www/privat/horde/imp/lib/Template.php on line 222

und

in dem nächsten Codeschnipsel macht der Aufruf der "set" Funktion probleme, auch die Fehlermeldung mit "Call to undefined function: set() in.."

Code:
if (isset($cacheid) &&
                !$this->_cache->set($cacheid, $this->_template)) {
                Horde::logMessage(sprintf(_("Could not save the compiled template file '%s'."), $file), __FILE__, __LINE__, PEAR_LOG_ERR);
            }
 
Problem besteht noch. Ich poste jetzt mal die komplette datei "Template.php" (wie gesagt, diese Datei stammt nicht von mir, sondern aus dem Projekt "horde" ich habe diese Funktion "Testausgabe" nur mal zum testen reingeschrieben.

Wo ist die datei Template.php? Bin ich blind oder kann ich sie nur nicht finden.Mal erlich was sollen wir immer mit diesen halben Informationen anfangen.

Welche bedeutung hat _cache ?

Aus deinen kurzen Schnipsel kann man nur entnehmen das versucht wird eine funktion aufzurufen über $this->_cache->get(); Gibt es eine funktion die _cache in der Klasse heißt wenn ja was tut die? Oder handelt es sich dabei um ein Objekt der Klasse?

Sorry aber um einen fehler nachvollziehen zu können muß man den ganzen Programm aublauf kennen und nicht nur ein parr Teile wo gerade mal der Fehler angezeigt wird.

Mfg Splasch
 
Zuletzt bearbeitet:
hmm stimmt, die datei hatte ich einfach vergessen.. shit.
Aber du hast auch recht, dass ich wahrscheinlich nicht weiterkomme, wenn ich in dem code herumschreibe.. ich muss mal davon ausgehen, dass dieser funktioniert und an anderer Stelle das Problem identifizieren.

Trotzdem vielen Dank
 
Zurück