| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

21-08-2010, 13:46
|
|
Version2
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 7
|
|
$_GET[] einer Eigenschaft zuweisen
Hallo,
ist es nicht möglich einer Eigenschaft einer Klasse einen Wert aus $_GET zu zuweisen?
Der Code ist ziemlich sinnlos, da ich nur etwas probieren will.
Code:
<?php
class hallo
{
private $text = $_GET['hallo'];
public function sagHallo()
{
return 'Hallo' . $this->text;
}
}
$hallo = new hallo;
echo $hallo->sagHallo();
?>
Ich bekommen immer einen fatal error.
Noch eine andere Frage, was bedeutet "gegen das Interface programmieren"?
danke schonmal
|

21-08-2010, 13:52
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.457
|
|
Hallo,
Zitat:
Zitat von Version2
ist es nicht möglich einer Eigenschaft einer Klasse einen Wert aus $_GET zu zuweisen?
|
Doch, aber im Konstruktor oder innerhalb von Methoden, nicht bei der Initialisierung, vgl. PHP: Eigenschaften - Manual
Zitat:
Zitat von Version2
Noch eine andere Frage, was bedeutet "gegen das Interface programmieren"?
|
Gegen Schnittstellen (Interfaces) Programmieren Guggat emol Blog
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

21-08-2010, 15:20
|
|
Version2
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 7
|
|
Zitat:
Zitat von AmicaNoctis
|
Danke für die Links. Diese Beschreibung hatte ich auch bei Google gefunden, kann leider nicht wirklich etwas damit anfangen  .
Hat jemand vielleicht ein konkretes Beispiel, also auch mit Code und so?
|

21-08-2010, 15:56
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.457
|
|
Was willst du jetzt genau wissen? Was Interfaces überhaupt sind oder wie man gegen sie programmiert? Hast du schon mal etwas über OOP gelesen? Wenn nicht, solltest du erstmal damit anfangen.
Man programmiert gegen ein Interface, wenn man in seiner Klasse keine anderen Klassen kennen muss und sie somit zur Laufzeit beliebig austauschbar sind. Da man trotzdem wissen muss, mit wem man es zu tun hat und ob der die Methode die man gerade anwenden will auch unterstützt, arbeitet man gegen ein Interface (d. h. man verlässt sich auf dessen deklarierte Methoden und ruft diese auf) und kann damit alle Klassen behandeln, die dieses Interface implementieren. Eine Kontrolle ob das der Fall ist, kann man mit instanceof oder Type Hinting durchführen.
Reicht das?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

21-08-2010, 18:04
|
|
Version2
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 7
|
|
ich glaube das hat mir weiter geholfen! Also so etwas in der Art:
PHP-Code:
<?php interface BenutzerAnzahl { public static function anzahl(); }
class AngabeBenutzerAnzahl implements BenutzerAnzahl { private static $benutzer = '25'; public static function anzahl() { return self::$benutzer; } }
class AusgabeBenutzerAnzahl { private $objekt; public function ausgabe() { $this->objekt = new AngabeBenutzerAnzahl; if ($this->objekt instanceof BenutzerAnzahl) { echo $this->objekt->anzahl(); } } }
$a = new AusgabeBenutzerAnzahl; $a->ausgabe(); ?>
Und da kommt bei mir grad die nächste Frage auf:
Wie kann ich feststellen, ob eine Klasse eine bestimmt Schnittstelle implementiert ohne eine Objekt diese Klasse zu erzeugen?
Ich habe es mal so probiert, funktioniert aber anscheinend nicht^^
PHP-Code:
if (AngabeBenutzerAnzahl instanceof BenutzerAnzahl) { echo AngabeBenutzerAnzahl::anzahl(); }else{ echo 'tschüss';
|

21-08-2010, 18:17
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.208
|
|
Zitat:
Zitat von Version2
Und da kommt bei mir grad die nächste Frage auf:
Wie kann ich feststellen, ob eine Klasse eine bestimmt Schnittstelle implementiert ohne eine Objekt diese Klasse zu erzeugen?
|
Warum willst du das?
|

21-08-2010, 18:58
|
|
Version2
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 7
|
|
Wenn ich eine statische Funktion nutzen will, muss ich ja kein Objekt erzeugen, deswegen.
|

21-08-2010, 19:47
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.208
|
|
Du kannst in einem Interface keine statischen Methoden vorschreiben, also macht ein Interface bei einer statischen Klasse wenig Sinn. Statische Klassen sind generell nur sehr sparsam einzusetzen. Wenn möglich, darauf verzichten.
Geändert von h3ll (21-08-2010 um 19:50 Uhr)
|

21-08-2010, 21:39
|
|
litterauspirna
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Beiträge: 333
|
|
Wie Amica schon schrieb kannst du einen GET Parameter nicht bei der Eigenschafteninitialisierung zuweisen. Wenn du der Meinung bist die Klasse, bzw. viele abarbeitende Methoden hängen von diesem GET Parameter ab dann übergibst du das ganz einfach dem Konstruktor.
Kleines Beispiel.
PHP-Code:
class MyClass{
protected $_getParam;
public function __construct($_getParam){
$this->_getParam = $_getParam;
}
//weitere methoden in denen du auf $this->_getParam zugreifen kannst
}
//aufruf der klasse
$_instanceMyClass = new MyClass($_GET['getParam']);
Das ist eigentlich das was du wolltest. In dem Fall gegen ein Interface programmieren kann man geteilter Meinung sein, dass würde meiner Meinung nach erst dann Sinn machen wenn mehrere Klassen mit diesem GET Paramter arbeiten müssen, aber auch dann würde ich eher eine abstrakte Klasse schreiben die den GET Parameter speichert. Obwohl das auch wieder einen kleinen haken hat, eine abstracte Klassen kann man nur via Vererbung einsetzen bzw. nutzen weil man davon ja keine Instanz bilden kann. Und da man in PHP keine Mehrfachvererbung umsetzen kann, kann dies dann auch wieder im weiteren System Probleme aufwerfen.
In dem Fall sehe ich momentan den Mehrwert den ein Interface bringen soll allerdings nicht. Kann aber auch daran liegen das ich selber sowas selten bis gar nicht einsetze und mir da ein wenig die Erfahrung dait fehlt.
Sollte ich mit meinen Aussagen falsch liegen, dann bitte korrigiert mich.
Jedoch das was du mit deinen Statischen Sachen machen willst ist mir vollkommen unklar udn dazu noch Sinnfrei.
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
|

21-08-2010, 22:10
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.208
|
|
Man kann natürlich alles auf die Spitze treiben. Wenn man es ganz genau nimmt, müsste man aus Allem Ojekte machen (wie es zB. bei Java ist). Aber das ist bei PHP eher nicht ratsam.
Man kann für jede Klasse ein Interface machen. Aber das ist auch nicht wirklich empfehlenswert.
Meine persönliche goldene Regel: Ich mache dort ein Interface, wo es für eine Aufgabe verschiedene Klassen gibt, oder wenn welche für die Zukunft vorgesehen sind. Also angenommen man integriert ein Bezahlsystem, dann macht es Sinn dafür ein Interface anzulegen, damit mehrere verschiedene Bezahlsysteme (Paypal, Authorize.NET, Qenta, etc.) über die selben Methoden angesprochen werden können.
Auch kann man "Eigenschaften" als Interface darstellen. Abstraktes Beispiel:
PHP-Code:
interface BuyableInterface {}
class Person { public $firstname; public $lastname; }
class Car implements BuyableInterface { public $brand; public $name; }
class ShoppingCart { protected $_cart = array();
public function addToCart(BuyableInterface $article) { $this->_cart[] = $article; } }
$person = new Person(); $person->firstname = 'Max'; $person->lastname = 'Mustermann';
$car = new Car(); $car->brand = 'Porsche'; $car->name = '911';
$shoppingCart = new ShoppingCart(); $shoppingCart->add($car); $shoppingCart->add($person); // geht nicht, wirft Fehler
Geändert von h3ll (21-08-2010 um 22:17 Uhr)
|

21-08-2010, 22:42
|
|
Version2
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 7
|
|
Vielen Dank für die Antworten, ich denke, dass ich es jetzt besser verstehe.
@litter: Ich will noch gar nichts machen, ich probiere nur das ganze etwas zu verstehen. Und will halt wissen was geht und was nicht. Ich habe bis jetzt nur Tutorials gelesen und noch nicht selber programmiert und damit will ich jetzt langsam anfangen
|

21-08-2010, 23:31
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.860
|
|
Zitat:
|
gegen ein Interface programmieren
|
Um die Verwirrung komplett zu machen:
Damit ist nicht gemeint, dass man unbedingt mit dem PHP Schlüsselwort "Interface" ein solches deklarieren muss oder sollte. Auch eine abstrakte Basisklasse kann dieser "Ideologie" entsprechen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|