Klassen Problem

EuroCent

Klappstuhl 2.0
Hab mich heute mal vrsucht eine Class zu erstellen

Nun folgendes habe ich vor:

Ich habe vor eine art Sprach-Changer einzubauen und wollte daher abfragen beispiel: $sprache['welcome']

So nun sollte $sprache['welcome'] in der datei lang.class.php schauen welche beschreibung dieses array hat

Ob meine Klasse so richtig ist weiss ich allerding bisher noch nicht da ich bin und mich gerade mal daran setzen möchte

PHP:
<?php
$dbhost = "localhost"; //Hostname
$dbuser = "root"; // DB-Username
$dbpass = ""; // DB-Password
$dbname = "cms"; // Datenbank-Name
		
mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);

class sprache {
	function sprache($item, $itemname) {
		$this->item = $item;
		$this->itemname = $itemname;
		$item = array();
		$itemname = array();
		
		$sql = mysql_query("SELECT itemname, item FROM languages WHERE itemname='".is_array($itemname)."'") or die(mysql_error());
			while($row = mysql_fetch_array($sql)) {
			
				$item[$row['item']] = $row['item'];
				$itemname[$row['itemname']] = $row['itemname'];
			
			}
	}
}
?>

in meiner Global.php hab ich dieses eingebau um überhaupt eigentlich drauf zugreifen zu können:

PHP:
<?php
require("lang.class.php");

$sprache= &new sprache($item, $itemname);
?>

in der index.php hab ich das stehen:

PHP:
<?php
require("global.php");

echo "Test Sprache: ".$sprache['welcome'];
?>

Aber leider zeigt er mir nur Test Sprache: an das wars mehr nicht
Normal sollte Test Sprache: Willkommen stehen

Könnt ihr mir weiter helfen? Also wo ich genauere Fehler gemacht habe und wie ich die beseitigen kann oder ob sogar meine Class voll für die katz ist und nie en könnte?

Da ich noch bin in der sache bin ich für jede hilfe sehr dankbar!
PHP kann ich von mir aus zu behaupten eigentlich recht gut nur wollt ich eben mal eine eigene class erstellen!

Danke euch allen vorweg
 
Du greifst auf die Klasse wie auf einen Array zu.
Bei Klassen musst Du mit -> arbeiten.
Um Methoden aufzurufen zum Beispiel so:
PHP:
$test->lala()
 
Was Du willst ist PHP ziemlich egal, Du wirst Dich schon an die Sprachkonventionen halten muessen.

Zusaetzlich gibt es in Deiner Klasse weder eine Funktion noch eine Variable namens welcome, also kann ich Dir auch nicht genau sagen wie Du zugreifen musst, also ob mit oder ohne Klammern.
Allgemein ist es aber eh besser immer mit Methoden (so nennt man Funktionen innerhalb von Klassen) zu arbeiten da es als schlechtes OOP angesehen wird direkt auf die Variablen in der Klasse zuzugreifen.
 
Naja ich habe mir das wie folgt gedacht:

In meiner Datenbank lege ich meine Sprachvariablen und deren Bedeutung fest beispiel:

ID: 1
itemname: index_welcome
item: Willkommen

ID: 2
itemname: index_guest
item: Gast

ID: 3
itemname: index_username
item: Benutzername

und mehr

nun wollt ich mittels einer klasse abfangen wenn ich in die Index.php beispielsweise mit "echo "Nachricht: ".$sprache->item('index_guest');"

so nun sollte allerding nicht index_guest sondern Gast stehen!

Wie aber mach ich das mit einer Klasse?
Ich bekomme es nicht wirklich hin!

gibt es eventuell ein Tutorials wo es eventuell beschrieben ist wie man es abfangen kann um an anzeigen zu können oder könntet ihr mir eventuell helfen?
 
Ich glaube, du hast eine falsche Vorstellung von einer Klasse. Mach dich am besten mal bei einer Suchmaschiene deiner Wahl über Objektorientierung schlau...


Aber ungefähr so sollte das funktionieren, wenn ich es auch nicht sonderlich sinnvoll finde ;)
PHP:
class Sprache {
  private ergebnis;

  public setErgebnis($ergebnis) {
    $this->ergebnis = $ergebnis;
  }

  public getErgebnis() {
    return $this->ergebnis;
  }

  __constructor($item, $itemname) {
    [...] deine komischen Abfragen
    $this->setErgebnis(die komischen ergebnisse deiner komischen abfragen);
  }
}

Dann erstellst du ein Objekt von der Klasse und greifst darauf zu
PHP:
  $sprache = new Sprache($item, $itenname);

  echo $sprache->getErgebnis();

Aber wie gesagt, das ist absoluter Dünnpfiff. Mach dich lieber mal über OOP schlau ;)

MfG.
Daniel
 
Hm, du gehst die Sache vollkommen falsch an, denk ich mir mal...

Erstell dir lieber sprachdateien und include diese...

Ordnerstruktur:

/lang/lang.xxx.inc.php
/index.php

Dateien:

PHP:
<?php
/*
     Sprachdatei Deutsch
     Name: lang.ger.inc.php
*/

/* defines Language for Modul 1*/
define("MOD_1", "Willkommen");
define("MOD_2", "Wechseln zu englischer Sprache?");
define("MOD_3", "Ja");
define("MOD_4", "Nein");
/* usw...*/
?>

PHP:
<?php
/*
     Sprachdatei English
     Name: lang.en.inc.php
*/

/* defines Language for Modul 1*/
define("MOD_1", "Welcome");
define("MOD_2", "Change to German Language?");
define("MOD_3", "Yes");
define("MOD_4", "No");
/* usw... */
?>


PHP:
<?php
/*
     index.php
     
*/
if(!empty($_GET['hl'])):
      include("lang/lang.".$_GET['hl'].".inc.php");
      $lang = ($_GET['hl'] === "ger") ? "en" : "ger";
else:
      include("lang/lang.ger.inc.php");
      $lang = "en";
endif;

echo '<pre>'.$lang;
echo MOD_1."<br/>";
echo MOD_2."<br/>";
echo '<a href="?hl='.$lang.'">'.MOD_3.'</a> | <a href="?hl='.$_GET['hl'].'">'.MOD_4.'</a>';
echo '</pre>';

?>

Das beispiel oben funktioniert, grad mal selbst sicherheitshalber nochmal getestet. Das iss doch DEUTLICH effektiver, als wenn du aus der MySQL-DB deine Sprachen ausliest! Musste die oben erwähnte Idee eben nur erweitern. Eventuell brauchst du dazu ne DB, in der du alle vorhanden Sprachen ausliest, eine Standartsprache definierst und diese dann bei seitenaufruf lädst. Die andren Sprachen lieste aus, stellste als Icon dar und verlinkst das Icon auf die jeweilige Sprache.

Ist doch viel simpler, als für den "Furz" sag ich mal :D eine Klasse zu nutzen...
 
Also ich finde hier den Gebrauch einer Klasse sehr gut sogar, vorallem in großen Projekten.

Vorallem da die Datei grundsätzlich alles lädt und ich in einer Datenbank z. B. angeben kann, welche Sektionen bzw. Variablen ich jetzt brauche.

Natürlich könnte man jetzt anführen und die Sprachdateien ebenfalls trennen, aber das wären dann wieder viele Includes.

Da beanspruche ich lieber mal die Datenbank und mache das mit einer netten Klasse.
 
Zurück