WinFuture-Forum.de: Php Und Oop - Fehler Mit Array - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Php Und Oop - Fehler Mit Array


#1 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 14. Mai 2007 - 21:25

Hi Leute, so langsam bin ich am verzweifeln, da ich den Fehler einfach nicht finde. Entweder geht es so gar nicht oder ich seh den Wald vor lauter Bäumen nicht.

Hier erstmal der code:
<?
session_start();

class winkelwagentje
{
	private $artikel = array();
	
	public function setArtikel($artnr, $aantal) {
		$this->artikel[$artnr] = $aantal ;
	}
	
	public function getArtikelen() {
		return $artikel;
	}
	
	public function getKosten() {
		foreach($artikel as $wert){
			$totaal += $wert * 10;
		}
		return $totaal; 
	}
	
	public function verwijderArtikel($artnr){
		unset($artikel[$artnr]);
	}
	
}

$winkelwagen = new winkelwagentje;

$winkelwagen->setArtikel('5',2);
$winkelwagen->setArtikel('10',5);

echo $winkelwagen->getKosten();

$_SESSION['winkelwagen'] = $winkelwagen;

?>

Ist leider das meiste auf Niederländisch da ich in Holland studiere, es soll aber eine Einkaufswagen ( winkelwagen ) -Klasse wiederspiegln, jedoch funktioniert diese nicht, da immer folgender Fehler erscheint:

Zitat

Warning: Invalid argument supplied for foreach() in C:\XAMPP\xampp\htdocs\ecommerce\winkelwagen.php on line 18

Was ja soviel wohl heißt, dass $artikel nicht gesetzt ist, ich verstehe aber nicht warum das so sein sollte...
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

Anzeige



#2 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.958
  • Beigetreten: 30. August 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 14. Mai 2007 - 21:27

müsste die klammer hinter dem arry nicht so ausshen
[]
?

ich kann zwar kein php aber in C und C++ ist das so...

mfg
Fabi
0

#3 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 14. Mai 2007 - 21:33

hinter welchem Array meinste genau? Oben bei der Konstruktion wird ja ein neues Array-Object erzeugt, deswegen müssen da ja () hin, ist halt nunmal anders als bei C :-/
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#4 Mitglied ist offline   Fabi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.958
  • Beigetreten: 30. August 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 14. Mai 2007 - 21:35

jap, da hab ich gemeint...naja ein versuch wars wert...

also dann geh ich mal schlafen...

gn8
Fabi
0

#5 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 15. Mai 2007 - 11:28

Was du durchaus einmal richtig gemacht hast, kannst du auch weiterhin richtig machen.

$this->artikel[$artnr] = $aantal;
ist doch vollkommen okay, warum dann gleich wieder alles kaputt machen mit
return $artikel;
.

$artikel wird immer leer sein, wenn nicht vorher deklariert. $this->artikel wird sich immer auf $artikel innerhalb des aktuellen objektes beziehen. Dann weiss die foreach auch endlich was $artikel überhaupt sein soll :gähn: folglich wäre
foreach($this->artikel as $wert)
richtig.
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 15. Mai 2007 - 11:41

[off]Endlich einer der versucht ordentlich in PHP zu entwickeln :gähn:[/off]

Yalamand hat vollkommen recht, da muss ich nichts mehr zu sagen.

Ich hätte jedoch noch einige Tipps, die mir beim Überfliegen deines Codes aufgefallen sind:

Klassennamen bitte immer groß schreiben, also Winkelwagentje

public function getKosten() {
foreach($artikel as $wert) {
$totaal += $wert * 10;
}
return $totaal;
}

$totaal bitte oben deklarieren. Du hast Glück, das PHP extremst hässlich ist und es überhaupt zulässt. In ordentlichen Sprachen wird das nämlich nicht gehen. Mach lieber sowas, erhöht zudem die Lesbarkeit:
$totaal = 0;

foreach($artikel as $wert ) {
	$totaal += $wert * 10;
}

return $totaal;


Bei der Erzeugung einer Instanz, also dem Aufrufen des Konstruktors sollte man auch immer Klammern setzen:
$winkelwagen = new Winkelwagentje();

Und diesen Code sollte man zudem nicht in der eigentlichen PHP-Datei der Klasse (wahrscheinlich Winkelwagentje.php), sondern an einer anderen Stelle haben.
0

#7 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 15. Mai 2007 - 11:54

Ok danke für die zahlreichen Tipps. Werde es gleich mal ausprobieren,
:gähn:

Edit:
Ok funktioniert, danke erstmal.

Falls ich noch weitere Fragen spöter haben sollte, werde ich es hier posten.

Dieser Beitrag wurde von Iso bearbeitet: 15. Mai 2007 - 11:56

Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0