Klassenvariablen mit Array setzen nicht.

Prophet05

Erfahrenes Mitglied
ich habe meine Klasse:
PHP:
<?php
 class user
 {
    private $name;
    private $sid;
 
    private $passwort;
    
    public function __construct($daten)
    {
 	$this->_Load($daten);
    }
    public function __destruct()
    {
    }
 
    public function _Load($daten)
    {
 	  $this->$name = $daten['name'];
 	  $this->$sid = $daten['sid'];
 	  $this->$passwort = $daten['passwort'];
    }
 }
 ?>

Dazu eine MySQL Tabelle (user) mit folgenden spalten und einem Eintrag:
name / sid / passwort
Prophet / 321DEF / mein_pw

Nun mach ich folgendes in meiner index php:
PHP:
<?php
 /* daten aus dem login form */
 $user_pw = $_POST['login_passwort'];
 $user_name = $_POST['login_name'];
 $user_sid = $_GET['sid']; /* get ist beabsichtigt! */
 
 $sql = "SELECT * FROM `user` WHERE `name`='$user_name' AND `passwort`='$user_pw' LIMIT 1;";
 $result = mysql_query($sql, $mysql_serververbindung);
 
 if($result)
 {
 	if(mysql_num_rows($result) > 0)
 	{
 		$daten = mysql_fetch_array($result); /*bis hier funktioniert es wenn ich daten ausgebe erhalte ich die richtigen werte. */
 		$User = new User($daten);
 		echo $User->GetName(); 
 		echo $User->GetSID();
 		echo $User->GetPasswort();
 /* diese funktione habe ich jetzt nicht aufgeschrieben sie returne einfach die Klassen vars. */
 	}
 }
 ?>

Ausgabe:

Warum gibt er mir 1 aus?

mfg Prophet
 
PHP:
    if(mysql_num_rows($result) > 0)
    {
        $daten = mysql_fetch_array($result);
        $User = new User;
        $User->_Load($daten);
        echo $User->name; 
        echo $User->sid;
        echo $User->passwort;
    }

Ich frage mich wieso du eine Methode mit einer anderen aufrufst. :confused:
Ich frage mich auch, ob die Klassen überhaupt Parameter haben. :confused:
PHP:
$this->$name = $daten['name'];
Ausserdem ist die Variable $name nicht deklariert. Würde also im Klartext so aussehen:
PHP:
$this-> = $data['name'];
Richtige Version:
PHP:
$this->name = $daten['name'];
Man erstellt auch keine Methode um eine Klassenvariable auszugeben.

Solltest lieber noch ein paar Tutorials durchlesen.

mfg
dmx
 
Doch, soweit ich Objekt Orientierte programmierung verstanden habe ist gerade das der sinn eines Objektes. Es soll seine Variablen eigenständig verwalten und damit dafür sorgen das sie immer die richigen werte besitzen und den Programmierer entlaten..

Wegen deinem ersten aufruf ich habe dort den Konstruktor aufgerufen der Parameter besitzt wie ich oben definiert habe. Der doppelte Methoden aufruf habe ich eingefügt damit ich unter umständen ein Objekt ein Zweites oder drittes mal mit anderen Daten initialisieren kann. Daher gibt es die Funktion _Load() auch noch einmal explizit.

Nun ja ich benutzt das Objektmodel aus PHP5 vielleicht hat dich das irritiert.

MfG Prophet
 
Zuletzt bearbeitet:
Wie schon gesagt, $this->$name = $daten['name']; ist insofern falsch, dass vor dem Namen der Klassenvariablen kein Dollarzeichen stehen darf. $this->name = $daten['name']; wäre also richtig.

DarkManX hat gesagt.:
Man erstellt auch keine Methode um eine Klassenvariable auszugeben.
Sehr wohl! Stichwort Kapselung.

DarkManX hat gesagt.:
Solltest lieber noch ein paar Tutorials durchlesen.
Du auch, und zwar über OOP ;)
 
Okey ich werde das mit den Dollarzeichen ändern, danke.

Hatte ich also recht das man die Variablen einer Klasse so schütz um sie von der Klasse verwalten zu lassen?

EDIT: Vielen Dank es hat Funktioniert.
 
Zuletzt bearbeitet:
Zurück