Klasse funktioniert nicht

xtramen01

Erfahrenes Mitglied
Hallo Leute,

nachdem ich mich nun mit oop ein wenig beschäftige, versuche ich meine erste Klasse zu basteln.

Aber es scheitert schon an der ersten Methode.

Kann mir da vielleicht jemand einen Tip geben, was ich falsch mache?

PHP:
class User
{
    var $uid;
    var $grpId;


    function gruppeID() {
    
        $this->grpId = '3';
    
    if (isset($_SESSION['userId'])) {
    
       $this->uid = $_SESSION['userId'];
    
       $sql = $db->query("SELECT * from users WHERE userId ='".$this->uid."' AND status != '0'");
       $user = $sql->fetchrow();

       $this->grpId = $user->userGruppe;
       
       return $this->grpId;
   
    }
    
       return $this->grpId;
    
    }
    
}

Aufruf dann so:

PHP:
   $user = new User();

   echo $user->gruppeID;

Es wird nichts ausgegeben ausser ein Notice: Undefined property: User::$gruppeID in .....

Gruss
 
Steht doch da: undefined property - nicht definiertes Eigentum (der Klasse)

1. Hast du keine Klasseninterne Variable namens $gruppeID definiert.
2. Du willst doch die Methode aufrufen und Methoden erkennt man wie Funktionen an den Klammern am Ende.

Du musst also deine Methode so aufrufen:
PHP:
<?php
$user = new User();
echo $user->gruppeID();
?>
 
Ui danke habs grade bemerkt, danke!

Soweit so gut. Eigentlich funktionierts....leider nicht wenn die benannte Session aktiv ist.
Dann bekomm ich die Meldung:

Notice: Undefined variable: db in......

Fatal error: Call to a member function query() on a non-object in .....

Tut mir leid wenn das vielleicht sehr stupide Fragen sind, aber ich kenn mich mit Klassen leider noch nicht so aus und weis noch nicht sooo genau was zu beachten ist.

Variablen müssen entweder mit var deklariert werden oder mit der Pseudovariable $this.....aber wie es sich mit Datenbankabfragen verhält weis ich leider nicht. Muss ich in der o.g. Klasse nun auch die Datenbankklasse extra aufrufen? oder wo liegt der Fehler?

Gruss und Danke!
 
Die Frage ist leicht zu beantworten: du rufst mit $db->query(...) eine Methode eines Objekts ($db) auf. Das Problem liegt darin, dass du nirgendwo das Objekt definierst.
 
Doch das Objekt wird aber ausserhalb der Klasse definiert mit:

PHP:
$db = new DB($host, $user, $pass, $db);

Die Abfrage geht einwandfrei....aber leider nicht in meiner erstellten Klasse?! ;-(

Muss ich da was beachten?
 
Ja. Variablen die außerhalb eines Objekts/Funktion existieren, existieren nicht in einem Objekt/Funktion. Dazu müssten sie entweder global sein oder an das Objekt/Funktion übergeben werden. Du musst wohl oder übel das Objekt $db in deiner Klasse initiieren.
 
Entweder so:

PHP:
....
 function gruppeID() {
        global $db;
    
    }
...

oder so (beim Funktionsaufruf dann $db mit übergeben).:

PHP:
....
 function gruppeID(&$db) {
    
    }
...
 
Zurück