PHP Aufruf einer Variable aus einer Klasse

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hier der Code:
PHP:
//Server Infos abrufen//
class Server_Info {
    function Server_Info(){
    $connectionid = mysql_connect ("localhost", "root", "****"); 
        if (!mysql_select_db ("llsystem", $connectionid)) 
         { 
         die ("Keine Verbindung zur Datenbank"); 
         } 
         $sql = "SELECT ". 
                "copyright, version ". 
                "FROM ". 
                "lls_info "; 
                
        $result = mysql_query ($sql);
        $data = mysql_fetch_array ($result); 
        $copyright = $data["copyright"];
        $version = $data["version"];
    }    
}
$Server_Info = &new Server_Info;
Wieso kann ich nicht per
PHP:
<?php echo $Server_Info -> copyright ?>
oder
PHP:
<?php echo $Server_Info -> version ?>
auf die Variablen $copyright oder $version zu greifen bzw sie abrufen ? Was mach ich falsch
 
DJ_We$t schrieb:
PHP:
//Server Infos abrufen//
class Server_Info {
    function Server_Info(){
        $this->data = mysql_fetch_array ($result); 
        $this->copyright = $data["copyright"];
    }    
}
$Server_Info = &new Server_Info;
Du musst ein this-> voranhängen, sonst sind die Variablen nur in der Methode gültig. An deiner Stelle würde ich die Variablen auch in der Klasse deklarieren, sonst siehst du bald überhaupt nicht durch.
 
Du musst die Variablen auch als Klassenvariablen bzw. Member deklarieren, ansonsten sind es nur lokale Variablen einer Methode und du kannst von außen nicht zugreifen. So gehts:
PHP:
class Server_Info {
    var $copyright;
    var $version;
    function Server_Info(){
    $connectionid = mysql_connect ("localhost", "root", "****"); 
        if (!mysql_select_db ("llsystem", $connectionid)) 
         { 
         die ("Keine Verbindung zur Datenbank"); 
         } 
         $sql = "SELECT ". 
                "copyright, version ". 
                "FROM ". 
                "lls_info "; 
                
        $result = mysql_query ($sql);
        $data = mysql_fetch_array ($result); 
        $this->copyright = $data["copyright"];
        $this->version = $data["version"];
    }    
}
$Server_Info = &new Server_Info;  
echo $Server_Info -> version;
Schöner wäre es aber mit Gettern und Settern zu arbeiten.
 
Die Variablen, die du aufrufen willst, werden als Lokale Variablen bezeichnet, sie existieren solange, bis die Funktion abgeschlossen ist. Außerhalb der Funktion kann man so nicht auf diese Zugreifen.

Du kannst entweder Attribute festlegen, die dann im Objekt der Klasse vorhanden sind, oder mit Referenzen arbeiten.
Attribute definiert man unter class Klassenname{ mit Zugriffsrecht und Name.
PHP:
class Server_Info {
	public $copyright;
	public $version;
    function Server_Info(){
    $connectionid = mysql_connect ("localhost", "root", "****"); 
        if (!mysql_select_db ("llsystem", $connectionid)) 
         { 
         die ("Keine Verbindung zur Datenbank"); 
         } 
         $sql = "SELECT ". 
                "copyright, version ". 
                "FROM ". 
                "lls_info "; 
                
        $result = mysql_query ($sql);
        $data = mysql_fetch_array ($result); 
        $this->copyright = $data["copyright"];
        $this->version = $data["version"];
    }
}
Public wird hier verwendet, damit du außerhalb des Objekts darauf zugreifen kannst.
$this beschreibt in der Klasse das aktuelle Objekt.

Genaueres findest du hier: http://www.php.net/manual/de/language.oop5.basic.php

EDIT: Man bin ich langsam :D
 
Danke für die vielen Hilfen, ich bin ja auch ein Idiot natürlich muss ich die Variablen public machen bzw. ausserhalb der Class erreichbar machen. In meinem Fall waren $copyright und $version nur innerhalb der Class verfügbar.
Ihr habt einem Blinden die Augen geöffnet danke.
 
<?php echo $Server_Info -> copyright ?>

das ist bad practise

man soll getter und setter methoden machen

am besten gleich abgewöhnen :P
 
Passiert den Meisten hin und wieder. Aber wie hier bereits angemerkt wurde, wäre es schöner, mit Get-Methoden und Set-Methoden zu arbeiten.
Die Get-Methoden geben dir die Werte, während die Set-Methoden die Werte neu setzen.
Frag mich nicht, wieso das normalerweise so gemacht wird^^.
PHP:
class Server_Info {
	private $copyright;
	private $version;
    function __construct(){
    $connectionid = mysql_connect ("localhost", "root", "****"); 
        if (!mysql_select_db ("llsystem", $connectionid)) 
         { 
         die ("Keine Verbindung zur Datenbank"); 
         } 
         $sql = "SELECT ". 
                "copyright, version ". 
                "FROM ". 
                "lls_info "; 
                
        $result = mysql_query ($sql);
        $data = mysql_fetch_array ($result); 
        $this->copyright = $data["copyright"];
        $this->version = $data["version"];
    }
	public function GetCopyright()
	{
		return $this->copyright;
	}
	public function GetVersion()
	{
		return $this->version;
	}
	/* 
	// Oder als Array
	public function GetAll
	{
		$array['copyright'] = $this->copyright;
		$array['version'] = $this->version;
		return $array;
	}
	*/
}

Funktionieren wird dein Code auch, aber so würde es sich normalerweise gehören. Es wäre nett, wenn sich jemand bereit erklären würde, den Grund zu erleutern.
 
Wenn ich ehrlich bin hab ich überhaupt keinen Plan im Moment von den Getter Setter Methoden. Am liebsten wäre mir wenn ich zum Beispiel bestimmte Dinge so ausgeben könnte {variablenname} das habe ich auch schon mal gesehen allerdings nichts darüber gefunden wie es funktionieren soll.
 
Getter und Setter werden u.a. dazu verwendet, um den Zugriff auf Variablen von außerhalb vor allem im Bezug auf Schnittstellen zu regeln.

Sehr oft kommt es zum Beispiel vor, dass eine Schnittstelle (bzw. eine Klasse) Systemvariablen bereitstellen muss, auf die andere Programme zugreifen müssen. Würde die Variable nur public deklariert werden, könnte man sie potentiell auch ändern und damit die Funktionalität des Kernprogramms gefährden. Definiere ich für eine Variable nur eine Getter Funktion, kann man den Wert zwar auslesen, aber nicht mehr überschreiben.
Kurz gesagt kann man also steuern, ob man eine Variable lesen und/oder schreiben kann.

Ein weiterer Vorteil ist, dass ich bei einer Setter Funktion zum Beispiel eine Überprüfung einführen kann, ob ein korrekter Wert gesetzt wird (zB sind für eine Variable nur Zahlen erlaubt, oder eine gewisse Länge, ... was auch immer).
Ich muss diese Überprüfung nur einmal machen, danach kann ich sicher sein, das bei jedem setzen der Variable der Wert stimmt.

Die Syntax in PHP ist recht einfach:

PHP:
class test {
  private $readwrite;
  private $readonly;

  public function getReadwrite() {
     return $this->readwrite;
  }

  public function setReadwrite($readwrite) {
     if(is_numeric($readwrite) {
        $this->readwrite = $readwrite;
     } // else Exception
  }

  public function getReadonly() {
     return $this->readonly;
  }
}


Hoffe das es so ein wenig klarer wurde :)


so long
 
Hm, also ich bin alles andere als ein PHP-Experte, aber du brauchst das ganze doch nur einmal, also kannst du dir den Umweg über die Klasse doch sparen. Keine Ahnung ob das "schön" ist, aber ich hätte das einfach mit ner festen Funktion gemacht:

PHP:
<?php
function GetIt(){
	$connectionid = mysql_connect ("localhost", "root", "****"); 
		if (!mysql_select_db ("llsystem", $connectionid)){ 
			die ("Keine Verbindung zur Datenbank"); 
		}
	$result = mysql_query ("SELECT copyright, version FROM lls_info");
    $data = mysql_fetch_assoc ($result); 
	return $data;
}
?>

Oder hat das irgendwelche Nachteile, die ich nicht seh?
 
Zuletzt bearbeitet von einem Moderator:
Nachteile nicht wirklich nur zu viele PHP Files. Ich habe mir ein Server Interface geschrieben. Also ein Framework basierend auf meiner eigenen Template Engine. Da der Mist dynamisch ins Template reingeladen werden soll lager ich alles in Klassen und Objekte aus.
 
Zurück
Oben