kostenloser Webspace werbefrei: lima-city


Zugreifen auf eine Variable in einer Klasse

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    lucas9991

    Kostenloser Webspace von lucas9991

    lucas9991 hat kostenlosen Webspace.

    moin moin
    also ich hab ne klasse geschrieben und will in dieser Klasse auf eine Variable zugreifen


    class Error {
    var $Email = true;
    function show_Error($Error) {
    $url = $_SERVER["SCRIPT_NAME"];
    if (isset($_SERVER["QUERY_STRING"]) && $_SERVER["QUERY_STRING"] != '') {
    $url .= "?" . $_SERVER["QUERY_STRING"];
    }
    echo sprintf("<br \>Fehler auf der Seite : %s <br \>", htmlspecialchars($url));
    echo sprintf("Fehlermeldung : %s <br \>", $Error);
    echo '<a href="?action=start">Zur?ck zur Startseite</a> | <a href="javascript:history.back();">Eine Seite zur?ck</a>';
    // if(!$this->Email) {
    Error::send_Error($Error);
    // }
    exit;
    }
    function send_Error($Error) {
    echo 'mail senden an '.$this->Email.'';
    }
    }


    ich habs wie man sieht mit $this versucht, aber er spukt das aus
    Fatal error: Using $this when not in object context in C:\server\htdocs\v2i-cms\class\class_Error.php on line 31
    ich habe die klasse ?ber Error::show_Error("blablub"); aufgerufen!
    man kann aber auch nich ?ber Error->Email auf die variable zugreifen...
    dann kommt das hier
    Parse error: syntax error, unexpected T_OBJECT_OPERATOR in C:\server\htdocs\v2i-cms\class\class_Error.php on line 31

    wie komm ich jetzt an den inhalt?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. derturbohummel

    derturbohummel hat kostenlosen Webspace.

    1. Sag erstmal, welche zeile die Zeile 31 ist.

    2. function show_Error($Error), function send_Error($Error)
    Damit ?berschreibst du den eigenen Klassennamen. Du brauchst dir nichs ?bergeben zu lassen, da du die Funktion ja sowieso an der richtigen Instanz der Klasse aufrufen kannst.

    3. Schreib deine Variablennamen klein, nur Klassenamen sollten gro? geschrieben werden. Das erh?ht die Lesbarkeit des Codes.

    4. Kann es sein, dass dir der Konstruktor fehlt?
    Du musst zuerst eine Instanz der Klasse Error erzeugen, bevor du die Funktion aufrufst, also so:
    $error = new Error();

    und innerhalb der Error-Klasse den Konstruktor anlegen, z.B.
    function Error($fehlertext){
    $this->Error = $fehlertext;
    }
  4. Autor dieses Themas

    lucas9991

    Kostenloser Webspace von lucas9991

    lucas9991 hat kostenlosen Webspace.

    1. die mit $this - is doch logisch oder?
    2. h??
    ich will einfach nur per aufruf den ermittelten fehler $Error mit ?bergeben...
    3. ma gucken ;)
    4. is ein konstruktor zwingend? wohl kaum oder?
    ich rufe die klasse nich ?ber
    $Error = new $Error(); auf
    ich machs so
    Error::show_Error("bla");
    hab ich doch oben geschrieben
    ich will nich dem error in die variable reinpacken, sonder eine email addy
    diese wird vorher eingetragen

    Error->$Email = "bla@bla.de";
    und das soll nur im bedarfsfall passieren
    das ganz zu beschreiben is zu viel ;)
  5. derturbohummel

    derturbohummel hat kostenlosen Webspace.

    Ja was speicherst du denn dann in $Error? Das is doch die Instanz von Error, die du vorher erzeugt hast, richtig?

    Und ja, du brauchst einen Konstruktor, da vorher die Instanz (!!) - Variable $Email nicht exestiert. Du musst sie im Konstruktor anlegen, sonst ist es klar, dass du nicht drauf zugreifen kannst.

    Du brauchst den ermittelten Fehler nicht mit ?bergeben, da du die funktion ja irgendwo bei diesem Objekt aufrufst.

    Beispiel:
    Irgendwo tritt ein Fehler auf. Dann machst du folgendes:
    $fehler = new Error();
    $fehler->Email = 'blabla@blubb';

    Alternativ kannst du dem Konstruktor gleich die Mail-Adresse ?bergeben, also so:
    $fehler = new Error( 'blabla@blubb');

    WICHTIG: Erst nach dem Instanziieren eines Error-Objekts ist die Variable $Email vorhanden. Vorher NICHT!
  6. Hiho lucas9991!

    Wenn du eine Methode ?ber den ::-Operator aufrufst, sind auch keine klasseninternen Variablen verf?gbar, daher kannst du "$this->" auch nicht benutzen. Halte dich also an die Empfehlungen von derturbohummel: Konstruktor schreiben, der die Variable initialisiert. Dann im Hauptprogramm das Objekt mit new() erzeugen, und die Methode mit $mein_objekt->methode() aufrufen. So kannst du "$this->"-Variablen benutzen.

    MfG
    alopex
  7. Autor dieses Themas

    lucas9991

    Kostenloser Webspace von lucas9991

    lucas9991 hat kostenlosen Webspace.


    WICHTIG: Erst nach dem Instanziieren eines Error-Objekts ist die Variable $Email vorhanden. Vorher NICHT!


    h?lst du mich f?r bl?de? :rolleyes:
    das habe ich doch gemacht, aber es aus platzgr?nden nich noch extra mitgepostet ;)
    na ja trotzdem danke :thumb:

    aber wie kann man dann aus einer anderen klasse diese klasse aufrufen?
    also z.b.

    class blub {
    function blub() {
    if($a='b') {
    $Fehler ->show_Error("Fehler"); // *
    }
    }

    $Fehler = new Error();
    $Fehler->$Email = "bla";

    $Blub = new blub();


    * wie soll ich hier auf die fehler klasse zugreifen?
    weil $Fehler gibts ja nich in der klasse blub...
  8. derturbohummel

    derturbohummel hat kostenlosen Webspace.

    Nochma: Du hast keine Instanz von der Klasse Error, an welcher Instanz soll denn die Funktion dann aufgerufen werden?

    So muss das aussehen:

    class Blub{
    var $fehler;

    function Blub(){
    $this->fehler = new Error('hier@da.de');
    }

    function x {
    blabla
    //Fehler tritt auf
    $this->fehler->show_Error("Fehler xx ist aufgetreten");
    }

    }

    class Error{
    var $email;

    function Error($mail){
    $this->email = $mail;
    }

    function show_error($errortext){
    was immer du da mit dem Fehlertext machst.
    }

    }

    $blubb = new Blubb();
    $blubb->x();


    Und bitte:
    halt dich an ein paar "Sch?nschreibregeln":
    - Klassen beginnen mit Gro?buchstaben
    - Variablen werden immer klein geschieben
    Was duu sch?n machst, sind die einfachen Anf?hrungszeichen. Das gef?llt mir.


    h?lst du mich f?r bl?de?
    das habe ich doch gemacht, aber es aus platzgr?nden nich noch extra mitgepostet ;)

    Ich wei? ja net, wie gut du bist. Kannst ein profi sein, der einfach mal was verpeilt hat (was mir auch schon passiert is), oder ein noob.

    Und da is mir noch ein Fehler aufgefallen:
    (3. Zeile in Blubb klasse):
    if($a='b') {
    Das soll wohl eher "if($a == 'b')" hei?en, oder? Sonst kommt da immer true raus, weil 'b' ungleich FALSE, also TRUE ist.

    mfg

    TH
  9. Autor dieses Themas

    lucas9991

    Kostenloser Webspace von lucas9991

    lucas9991 hat kostenlosen Webspace.



    derturbohummel schrieb:
    Nochma: Du hast keine Instanz von der Klasse Error, an welcher Instanz soll denn die Funktion dann aufgerufen werden?

    So muss das aussehen:

    class Blub{
    var $fehler; // die variable sollte man setzten ;)

    function Blub(){
    $this->fehler = new Error('hier@da.de');
    }

    function x {
    blabla
    //Fehler tritt auf
    $this->fehler->show_Error('Fehler xx ist aufgetreten');
    }

    }

    class Error{
    var $email;

    function Error($mail){
    $this->email = $mail;
    }

    function show_error($errortext){
    was immer du da mit dem Fehlertext machst.
    }

    }

    $blubb = new Blubb();
    $blubb->x();

    ok, aber das d?rfte auch nich funtzten :P
    aber jetzt weiss ich wie ich es machen muss
    thx


    Und bitte:
    halt dich an ein paar 'Sch?nschreibregeln':
    - Klassen beginnen mit Gro?buchstaben
    - Variablen werden immer klein geschieben
    Was duu sch?n machst, sind die einfachen Anf?hrungszeichen. Das gef?llt mir.

    - meine klassen beginnen mit gro?buchstaben ;)
    - alle meine variablen die global oder die wichtig sind hab ich gro? geschrieben, aber wenns dich st?rt werd ich es selbstverst?ndlich um?ndern :biggrin:
    - freut mich, dass es dir gef?llt xD


    Ich wei? ja net, wie gut du bist. Kannst ein profi sein, der einfach mal was verpeilt hat (was mir auch schon passiert is), oder ein noob.

    na ja aber ein n00b f?ngt ja nich mit klassen an oder? :blah:


    Und da is mir noch ein Fehler aufgefallen:
    (3. Zeile in Blubb klasse):
    if($a='b') {
    Das soll wohl eher 'if($a == 'b')' hei?en, oder? Sonst kommt da immer true raus, weil 'b' ungleich FALSE, also TRUE ist.
    mfg
    TH

    :shy::shy:
  10. stimmt aber schon..

    bei if ($a = 'b'){
    ..code..
    }

    wird ..code.. immer ausgef?hrt.
    Aber nicht weil 'b' TRUE ist, sondern weil in $a dann 'b' drinsteht (=ist fast das gleiche wie
    <?php
    $a = 'b';
    ?>

    also wenn 'b' zugewiesen werden kann)

    =-Operatoren

    = -> Zuweisen einer Variable
    == -> Vergleichen ( '1' = 1)
    === -> Bitweises Vergleichen ('1' != 1)

    mfg asmodeus
  11. derturbohummel

    derturbohummel hat kostenlosen Webspace.

    Stimmt, hab ich mich falsch ausgedr?ckt. Das wollt ich damit sagen.

    Und doch, es funzt.

    Es kommt aufs Buch an. Gibt genug leutz, die schonmal was von "Klassen" gelesen haben, keinen Plan davon haben, und die dann einfach mal mit in den Code reinwurschteln.
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!