php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.06.2009, 21:23  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard parameter von interfaces in klassen richtig mit anwenden?

Hallo und guten Abend Gemeinde,

ich habe da mal ein Frage an euch. Und zwar ich weis was ein Interface ist und zu was es da ist. Nun habe ich mir mal zur Übung ein kleines Vorhaben gesetzt was ich immer mehr ausbauen will. Das ganze Ziel heist Fahrzeug. Ein Fahrzeug kann ein Fahrrad, ein Auto, ein LKW oder auch ein Bus sein. So also dachte ich mir ich überlege mir welche absoluten Grundeigenschaften hat ein Fahrzeug und kam zu de rLösung Räder, Farbe, Licht, Antrieb hat ein Fahrzeug auf alle Fälle. Nun habe ich dafür die Methoden in ein Interface geschrieben und zwar so.

PHP-Code:
//interface_fahrzeug_grund.php
/*
*
* interface fahrzeuggrundeigenschaften
*
*/
interface Fahrzeug_Grundeigenschaften
{
 public function 
SetFarbe($farbe);
 public function 
SetRaeder($anzahl,$zoll);
 public function 
SetLicht($licht,$anzahl,$licht_art);
 public function 
SetAntrieb($art);

So eine Farbe ist eine Farbe (effekt lackierung mal ausen vor gelassen).

Räder kann das Fahrzeug 1 - 4 oder mehr haben und auch unterschiedliche Zoll Größen. Darum in der Methode SetRaeder auch $anzahl und $zoll drin steht.

Licht ist auch immer an einem Fahrzeug dran (sollte zumindest) kann aber auch eine unterschiedliche Art sein (Hallogeener, getönt) ein Fahrzeug kann unterschiedlich viele Scheinwerfer haben. Und eine Fahrzeug kann Auf wie Abblendlicht haben. $licht für Art des Lichtes $anzahl für die Anzahl der Scheinwerfer und $licht_art für Auf und / oder Abblendlicht, das ganze in der Methode SetLicht.

Und jedes Fahrzeug hat einen Antrieb, denn ohne geht nichts und wenns bei einer Seifenkiste die Beine sind. Deshalb die Methode SetAntrieb und $art für die Antriebsart.

Somit bin ich der Meinung habe ich erst mal die wichtigsten Sachen in der Schnittstelle die ich als Grundeigenschaften für ein Fahrzeug brauche.


Nun meine Klasse und mein eigentliches Problem, wie in der Klasse die Parameter (denn ich muss die gleiche Anzahl der Parameter mit übergeben und auch vom gleichen Namen) dann richtig in den einzelnen Methoden einsetzen? Müsste ich diese Vorher schon mal initialisieren?

Meine Klasse.
PHP-Code:
<?php
require_once('interfaces/interface_fahrzeug_grund.php');
/*
-------------------------------------------------------------
 klasse fahrzeuggrundeigenschaften
-------------------------------------------------------------
*/
class FahrzeugStandart implements Fahrzeug_Grundeigenschaften
{
 private 
$farbe;
 private 
$raeder;
 private 
$licht;
 private 
$antrieb;
 
 
/*
 *
 * set farbe
 *
 */
 
public function SetFarbe($farbe)
 {
  return 
$this->farbe $farbe;
 }
 
 
/*
 *
 * set raeder
 *
 */
 
public function SetRaeder($anzahl,$zoll)
 {
  return 
$this->raeder $anzahl;
 }
 
 
/*
 *
 * set licht
 *
 */
 
public function SetLicht($licht,$anzahl,$licht_art)
 {
  return 
$this->licht $licht;
 }
 
 
/*
 *
 * set antrieb
 *
 */
 
public function SetAntrieb($art)
 {
  
$this->antrieb $art;
 }
}
?>
Wie ihr seht übergebe ich richtig alle Parameter und setze auch alle Methoden ein aus dem Interfacse.

Nun kann ich einefach bei instanzieren des Objektes (der Klasse) es so machen.

PHP-Code:
<?php
require_once('class_fahrzeug.php');
$fahrzeug = new FahrzeugStandart();
$fahrzeug_farbe $fahrzeug->SetFarbe('GRÜN');
$fahrzeug_raeder $fahrzeug->SetRaeder('4',NULL);
echo 
'Farbe ist - <b>('.$fahrzeug_farbe.')</b>';
echo 
'<br />';
echo 
'Radanzahl - <b>('.$fahrzeug_raeder.')</b>';
?>
Das ich einen Parameter den ich eventuell nicht brauche einfach mit NULL belege, aber as ist meiner Meinung nach nicht sauber und auch am Ziel vorbei geschossen.

Meine Frage also wie setze ich in der Klasse in der Methode die Variablen die als Parameter da drin stehen richtig ein?

Ich hoffe mal ich habe das verständlich erklärt und auf gute ANtworten.

Vielen Dank für eure Zeit und Müh Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.06.2009, 22:03  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

verstehe ich das richtig, dass dieses NULL dein problem ist?
überladen kann man afaik nicht in php, aber kannst ja sowas machen:
PHP-Code:
 public function SetRaeder($anzahl,$zoll = -1); 
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline  
Alt 29.06.2009, 22:16  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Sorry, ich meine es nicht böse, aber: Standard.

Du könntest die Zoll auch aus dem Interface rauslassen und bei Bedarf eine SetZoll-Methode hinzubauen. Das ist immer das Problem mit den "am Schreibtisch" entstandenen Beispielen.

Und ja, ich würde die Felder im Konstruktor (public function __construct() {}) in jedem Fall mit einem Standardwert initialisieren.

Kannst du übrigens begründen, wieso du hier ein Interface einsetzt und nicht dein FahrzeugStandart von einer Oberklasse FahrzeugProto (oder wie auch immer) erben lässt?
mermshaus ist gerade online  
Alt 30.06.2009, 08:06  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Weil ich einfach über mit den ganzen Sachen umzugehen und wenn es nun mal Sachen gibt die jedes Fahrzeug hat, egal welches, dann kann ich diese doch als vordefinierte Methoden in einem Interface festlegen, dafür sind Interfaces doch.

Ich habe dann zum Beispiel auch noch vor (zur Übung) gewisse Sachen als Grund Methoden in abtracte Klassen zu schreiben und diese dann in den Hauptklassen zu nutzen je nach Fahrzeug auszubauen.

Also sollte ich im Interface die Parameter Angaben weg lassen, diese kann ich ja dann nach Bedarf in der eigentlichen Methode in der Klasse eintargen und entsprechend verwenden?
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 30.06.2009, 09:09  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

deine funktionen tun doch eigentlich in jeder klasse das selbe oder nicht? ich sehe da den sinn eines interfaces nicht so ...
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline  
Alt 30.06.2009, 09:28  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Warum siehst du da den Sinn nicht drin? Ein Interface ist eine ja dafür gedacht als Schnittstelle zu stehen die Methoden vorgibt die in einer Klasse undbedingt dann abgehandelt werden müssen.

Und wenn nun mal alle Fahrzeuge grundliegende Eigenschaften haben, dann kann ich die in einem Interface vorbestimmen und dann in den jeweiligen Klassen ob nun abstract oder normale Klassen verweden.

Das ist das was ich als Sinn in einem Interface sehe, von daher ist doch egal ob diese methoden in mehreren Klassen immer mal wieder verwendet werden.

Oder ich ahbe den Sinn eines Interfaces komplett falsch verstanden.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 30.06.2009, 09:36  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich würde auch eher zu einer abstrakten Klasse als Elternklasse tendieren, wie mermshaus das beschrieben hat.

Den wirklichen Sinn von einem Interface habe ich allerdings auch noch nicht verstanden
Ich habe gelesen, es diene zur Kommunikation zwischen mehreren Klassen. Wie durch deine Methoden (oder überhaupt durch ein Interface) eine Kommunikation realisiert werden kann, ist mir schleierhaft. Desweiteren verstehe ich nicht, was mit "Kommunikation" überhaupt gemeint ist!

Vielleicht kann mich ja auch mal jemand aufklären!?

Gruß
Asipak ist offline  
Alt 30.06.2009, 09:44  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Asipak Beitrag anzeigen
Ich würde auch eher zu einer abstrakten Klasse als Elternklasse tendieren, wie mermshaus das beschrieben hat.
Sicher auf eine abstracte Klasse will ich auch noch hinaus wo gewisse Methoden im Grundprinzip schon ihren Inhalt erhalten (Programmcode) der überall im Prinzip gleich ist und diese dann will ich den eigentlichen abhandelnten bzw. einzusetzenden Klassen erweitern auf ein Fahrzeug oder Typ wie auch immer speziell.

Zitat:
Zitat von Asipak Beitrag anzeigen
Den wirklichen Sinn von einem Interface habe ich allerdings auch noch nicht verstanden
Naja den Sinn eines Interfaces ahbe ich schon verstanden und auch eigentlich in meinem Übungsvorhaben richtig beschrieben. Ein Interface bietet eine Schnittstelle für Klassen, (auch abstracte Klassen) in dem Methoden vordefiniert werden. Das heist an meinem Beispiel, jedes Fahrzeug hat nun mal Räder, eine Farbe, Licht und einen Antrieb. Also erzwinge ich in einem Interface die dafür benötigten Methoden vor. Dann kann ich diese in einer abstracten Klasse einsetzen bzw. muss ich wenn ich das Interface implementiere und da Grundliegendes an Programmcode erstellen was prinzipiell bei allen Fahrzeugen gleich ist. Und dann kann ich die abstracte Klasse in eine spezielle Endproduktklasse einbinden und da Finale Methoden schreiben die auf den Grundmethoden der abstracten Klasse basieren, aber eben je nachdem ins spezielle Datail gehen.

Zitat:
Zitat von Asipak Beitrag anzeigen
Ich habe gelesen, es diene zur Kommunikation zwischen mehreren Klassen. Wie durch deine Methoden (oder überhaupt) eine Kommunikation realisiert werden kann, ist mir schleierhaft.
So diesen Punkt habe ich nun auch grad oben beschrieben, halt alles in einem.

Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 30.06.2009, 09:52  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Ein Interface bietet eine Schnittstelle für Klassen, (auch abstracte Klassen) in dem Methoden vordefiniert werden. Das heist an meinem Beispiel, jedes Fahrzeug hat nun mal Räder, eine Farbe, Licht und einen Antrieb. Also erzwinge ich in einem Interface die dafür benötigten Methoden vor. [...]
Naja, das tut eine abstrakte Klasse durch abstrakte Methoden auch. Ich dachte, es gäbe vielleicht einen größeren Unterschied zwischen Interface und abstrakter Klasse.

Zum Beispiel: ich nehme ein Interface, wenn zwei Klassen, die bis auf die im Interface definierten Methoden, nicht wirklich etwas gemein haben. Über das Interface können diese dann Eigenschaften mitteilen und verändern.

Eine abstrakte Klasse dagegen nutze ich z.B. wenn ich mehrere Fahrzeugtypen haben, die eine gemeinsame Elternklasse wie "FahrzeugProto" haben! Wie bei deinem Beispiel.

Wobei ich jetzt nicht weiß ob diese Beispiele stimmen!

Mir fehlt da irgendwie ein konkretes Beispiel
Asipak ist offline  
Alt 30.06.2009, 10:06  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Der Unterschied vom Interface zu einer abstracten Klasse ist der, dass man in einem Interface nur und ausschlieslich nur Methoden vordefiniert werden, man kann im Interface keine Methoden mit abhandelnden Programmcode versehen. Die Methoden aus einem Interface müssen absolut gleich in der Klasse wo sie implementiert werden genutzt werden, dass heist von der Sichtbarkeitseingrenzung her wie vom Methodennamen und auch von eventueller Parameterübergabe.

In einer abstracten Klasse kannst du Methoden auch abhandlungscode mitgeben. Die Sichtabarkeitsbegrenzung muss in der abhandelnden Klasse wo die abstracte Klasse eingebunden mindestens gleich sein oder eins höher. Das heist verwendest du in eine abstracten Klasse protected dann muss in der Hauptklasse auch mindestens protected darauf verwendet werden oder eins höher also public. Private kannst dagegen hin nicht mehr verwenden. Auch kannst du in einer abstracten Klasse kein private verwenden, weil ud das dann nicht mehr weiter verwenden kannst und auch Sinnfrei wäre.

Wieterer Unterschied daraus in einem Interface müssen alle Methoden auf public stehen und somit kannst in einer abhandelnden Klasse auch nur dies Methoden eben als public verwenden.

Gleichheit beiden, aus beiden kannst du kein Objecte instanzieren. So habe ich das zumindest verstanden.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sinn und Zweck abstracter klassen und interfaces litterauspirna PHP Tipps 2009 8 13.06.2009 00:14
Mehrere Klassen verknüpfen BlackJack01090 Software-Design 9 26.05.2009 20:43
wie Passwortschutz richtig anwenden? ricardo PHP Tipps 2009 13 19.01.2009 16:39
SOAP Server Parameter richtig zuordnen Anotherone PHP Tipps 2008 0 12.12.2007 11:23
Parameter überschreiben Igäl PHP Tipps 2006 8 04.06.2006 19:55
Parameter der mysql.exe richtig übergeben bendigo Datenbanken 5 24.11.2005 13:31
NOT EXISTS und NOT IN richtig anwenden Datenbanken 6 11.08.2004 09:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
interface parameter, php klassen parameter, parameter interface, interface als parameter, interface methode parameter, php interface parameter, php interface eigenschaften, parameter interfaces, php interfaces, klasse mit parameter php, klasse parameter, parameterübergabe wo richtig einsetzen, interface gleiche methode unterschiedliche parameter, was sind die parameter von klassen und methoden, function parameter interface php, interface methoden parameter festelegen, mehrer klassen anwenden php, interface methoden parameter, eigenschaften aus interfaces, interface php eigenschaften

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum