TP Underground Lounge 07/08
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 21.06.2008, 21:05   #1
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein

Funktion über Variable der Oberklasse aufrufen


Hallo!

Man kann ja bekanntlich Funktionen über Variablen aufrufen. Also so:
PHP-Code:
function test()
{
    echo 
'Das ist ein Test';
}
$myFunc 'test';
echo 
$myFunc(); 
Ich arbeite mit Klassen und habe die Variable in der Oberklasse und die Funktion in der Unterklasse. Also so:
PHP-Code:
class myclass_father
{
    var 
$myFunc "test";
}

class 
myclass_child extends myclass_father
{
    function 
test()
    {
        echo 
'Das ist ein Test';
    }

Jetzt soll in einer anderen Funktion der Unterklasse die Funktion test() über die Variable der Oberklasse aufgerufen werden:
PHP-Code:
class myclass_father
{
    var 
$myFunc "test";
}

class 
myclass_child extends myclass_father
{
    function 
test()
    {
        echo 
'Das ist ein Test';
    }

    function 
rufe_auf()
    {
        
$this->myFunc(); //Zeile, die Fehlermeldung produziert
    


PHP-Code:
$new = new myclass_child;
$new->rufe_auf(); 
Und genau das funktioniert nicht!
es kommt die Fehlermeldung "Fatal error: Call to undefined method: myclass_child->myfunc()"
erst wenn ich die betroffene Zeile änder zu "myclass_child::$this->myFunc();" geht es.

Weiß jemand warum?

Geändert von Sand*mann (21.06.2008 um 21:16 Uhr).
Sand*mann ist offline   Mit Zitat antworten


Alt 21.06.2008, 22:47   #2
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Wie wäre es mit einem dyn. Aufruf?
PHP-Code:
$this->{$this->myFunc}(); 
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE || PS Kniffe
emCalculator 1.0



webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 21.06.2008, 23:35   #3
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein
Aaaah, super!!! Besten Dank!

Mich würde noch interessieren, warum das genau nicht funktioniert hat, oder warum call_user_func da auch nicht greift. Leider gibt Google da nicht viel her, oder ich hab die falschen Stichworte. Oder braucht man da schon Literatur?

Aufe jeden Fall, vielen Dank für deine Hilfe!
Sand*mann ist offline   Mit Zitat antworten
Alt 21.06.2008, 23:50   #4
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Lit nicht, nur die php.net Doku
PHP-Code:
call_user_func (array(&$this$this->myFunc)); 
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE || PS Kniffe
emCalculator 1.0



webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 22.06.2008, 00:09   #5
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein
Aha. Okay, jetzt weiß ich, wie es geht, aber verstanden warum es das tut, hab ich nicht

Ich weiß einfach zu wenig über die Funktionsweise und Handhabung von &new, $$ und objekt->objekt->methode() Konstruktionen um die Beispiele zu verstehen.
Genauso wenig verstehe ich, warum es nötig ist bei call_user_func die komplette Objektreferenz als Value mitzugeben (ich meine das &$this).
Sand*mann ist offline   Mit Zitat antworten
Alt 22.06.2008, 00:25   #6
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Das ist bei PHP5 auch nicht nötig, da PHP5 von Hause aus mit Referenzen arbeitet. Bei PHP4 ist es jedoch sinnig das & zu verwenden, da man sonst mit einer Kopie und nicht mit einer Ref. arbeitet.
Will man in PHP5 mit einer Kopie arbeiten, nutzt man clone.

Die Syntax von call_user_func kann ich Dir auch nicht erklären. Diese verwende ich nie.
Aber $this->{$this->myFunc}(); ist ja nun nicht wirklich so ungewöhnlich. Die Verwendung von ${} kennt man ja schon vom 'normalen' PHP und dyn. Vars.
$this-> zu begin ist wohl klar.
{$this->myFunc} ist halt das aufgreifen der vererbten Klassenvariabel myFunc
() wird dann halt noch angehangen um die Methode aufzurufen.
Aufgelöst ist es ja nichts anderes als $this->test();
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE || PS Kniffe
emCalculator 1.0



webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 22.06.2008, 00:39   #7
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein
${} kannte ich eben nicht!
Das war der Knackpunkt
Ist ${$} und $$ das gleiche?

Vielen Dank für deine Mühe!
Sand*mann ist offline   Mit Zitat antworten
Alt 22.06.2008, 00:54   #8
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
delete this
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE || PS Kniffe
emCalculator 1.0



webcreate IT SOLUTIONS
www.webcreate-nrw.de

Geändert von webcreate (22.06.2008 um 01:05 Uhr). Grund: Doppelt
webcreate ist offline   Mit Zitat antworten
Alt 22.06.2008, 01:01   #9
TP-Urgestein
 
Benutzerbild von webcreate
 
Registriert seit: Nov 2003
Ort: NRW
webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichtswebcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts
Eigentlich ja, wobei ${} den vorteil hat, dass man statische und dyn. Teile mischen kann.

Bsp
PHP-Code:
$t1 'so ';
$t2 'geht ';
$t3 'das.';

for(
$i 1$i <= 3$i++){
    echo ${
't'.$i};        // geht
    //echo $$'t'.$i;    // geht nicht

EDIT
Wat schreib ich hier denn soviel? Schau mal hier
__________________
Gruß Mark
Mein Blog zum TP || XING Profil || grafiker.de Profil || How to use GOOGLE || PS Kniffe
emCalculator 1.0



webcreate IT SOLUTIONS
www.webcreate-nrw.de
webcreate ist offline   Mit Zitat antworten
Alt 22.06.2008, 01:02   #10
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein
Japp, okay, dann hab ichs!
Allerbesten Dank!
Sand*mann ist offline   Mit Zitat antworten
Alt 22.06.2008, 12:05   #11
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
mal ne Frage, warum denn so kompliziert?

$this->test() ist doch völlig ausreichend
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.06.2008, 13:43   #12
TP-Supporter
 
Benutzerbild von Sand*mann
 
Registriert seit: Nov 2005
Sand*mann bringt sich richtig ein
Das muss sein, weil der Benutzer die Möglichkeit haben muss in der Unterklasse selber Funktionen zu definieren. D.h. der Name der Funktion ist gar nicht bekannt. Er wird in einem array "extensions" gespeichert, wozu es eine methode set_extension gibt und dann mit $this->{$this->extensions[$i]}() aufgerufen.

Das ganze dient dann dazu, dass der Benutzer für Templates selber Platzhalter definieren kann. Wenn ich also in einem Template {wasganztolles} benutzen will, muss ich nur set_extension("wasganztolles") aufrufen und eine funktion mit dem gleichen Namen schreiben, zB
PHP-Code:
function wasganztolles()
{
return 
$irgendwas;

Dann wird jedes {wasganztolles} im Template mit $irgendwas ersetzt.
Sand*mann ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Funktion über Variable der Oberklasse aufrufen [PHP] Funktion über Variable der Oberklasse aufrufen
« User Login klappt nach Upload nicht mehr | Bug in __set() ? »

Stichworte
php

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Methode über Variable aufrufen Master_T2 Traum-Dynamik 5 01.03.2008 17:36
Wie Funktion aufrufen - Sliding Elli Flash 8 6 18.02.2008 19:43
PHP in Javascript funktion aufrufen dallasstar Traum-Dynamik 16 24.01.2007 15:06
über einen Klick eine Funktion aufrufen ogre Traum-Dynamik 2 13.03.2004 18:27
Funktion aufrufen! GeorgWBush Traum-Dynamik 1 27.05.2002 13:49


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:46 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33