php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 22-10-2009, 11:12
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Das Subjekt soll irgendwas loggen.
Dazu bekommt es eine Referenz auf den Observer Überreicht.
Wenn es was zu loggen gibt, schick das Subjekt dem Observer eine Nachricht.

Das Subjekt kann auch ohne Logger überleben.
Es können sich mehrere Logger beim Subjekt eintragen.


Ich sehe da alle Bedingungen für den Einsatz dieses Pattern erfüllt.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #17 (permalink)  
Alt 22-10-2009, 12:59
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Aber der TO will "in jeder Datei" (lies Klasse) Zugriff auf den Logger haben. Dafür müßte jedes Objekt observiert werden. Um das sauber umzusetzen, müsste jede Klasse mit implements/extends Observable versehen werden und nach jeder Konstruktion eines Objekts muss der Logger als Observer gesetzt werden.

Wenn sich ein Pattern über absolut alle Klassen erstreckt, hat man garantiert was falsch gemacht!
Mit Zitat antworten
  #18 (permalink)  
Alt 22-10-2009, 13:57
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wie auch immer....
Trotz der spärlichen Angaben des TE sind hier 3 Wege aufgetaucht:
1. Globale Variablen
2. Singleton (oder einfache statische Variablen)
3. Subjekt-Observer

Alle drei haben so ihre spezifischen Vor und Nachteile. Wobei für mich die Nachteile von 1 und 2 überwiegen. Auch sehe ich keine Notwendigkeit, jede Klasse mit diesem Interface auszustatten.

Dank meiner eigenen (teilweise bitteren) Erfahrungen, werde ich niemals "bau es als Singleton" sagen.
Immer nur davon abraten. Und: Es gibt immer Alternativen.
__________________
Wir werden alle sterben

Geändert von combie (22-10-2009 um 14:00 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 22-10-2009, 14:46
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Dank meiner eigenen (teilweise bitteren) Erfahrungen, werde ich niemals
Und ich würde lieber erstmal sagen: Eins nach dem andern. Schau dir mal die Threads des TOs an. Schau dir die Fragen an. Und dann leite daraus den Kenntnisstand ab.
Mit Zitat antworten
  #20 (permalink)  
Alt 22-10-2009, 15:14
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Und dann leite daraus den Kenntnisstand ab.
Möchtest du diesen Stand festigen, oder Stoff zur Weiterentwicklung liefern?
Gerade jemanden, mit niedrigem Kenntnisstand sollte man nicht auf Irrwege schicken. Und Singleton ist (erstaunlich häufig) ein Irrweg.
Der TE möchte sich mit Klassen/OOP beschäftigen. Dazu gehört auch die Anwendung der Design Pattern. Ob beabsichtigt, oder nicht. Ob angelesen, oder selbst entwickelt.

Was von mir als sinnvoller/witziger Wink von der Seite gedacht war, wird jetzt zum Problem. Zum Prüfstein. Naja....
Welches Mittel oder welcher Weg von irgendwem genutzt wird, da habe ich sowieso keinen Einfluss.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #21 (permalink)  
Alt 22-10-2009, 15:23
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Möchtest du diesen Stand festigen, oder Stoff zur Weiterentwicklung liefern?
Gerade jemanden, mit niedrigem Kenntnisstand sollte man nicht auf Irrwege schicken. Und Singleton ist (erstaunlich häufig) ein Irrweg.
Der TE möchte sich mit Klassen/OOP beschäftigen. Dazu gehört auch die Anwendung der Design Pattern. Ob beabsichtigt, oder nicht. Ob angelesen, oder selbst entwickelt.
Und ob es einem gefällt oder nicht, aber das Singleton gehört zu den Design-Pattern, wenn man die GoF als Referenz nimmt. Das auszublenden wäre IMHO gefährlicher, wenn man möchte, dass sich der TO weiterentwickelt. Und ich habe ihm neue Wege aufgezeigt, die ihn weiterbringen würden …*du willst nur, dass er sofort den (jedenfalls deiner Meinung nach) besten geht. Und das halte ich zum jetzigen Zeitpunkt für verfrüht. Es sei denn, du möchtest hier einen kostenlosen Power-Workshop machen um die dutzenden F'ups zu beantworten. Da hab ich nämlich keine Lust drauf –*allein weil es dazu auch noch nicht von Erfolg gekrönt sein wird.
Mit Zitat antworten
  #22 (permalink)  
Alt 22-10-2009, 15:52
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Und ob es einem gefällt oder nicht, aber das Singleton gehört zu den Design-Pattern, wenn man die GoF als Referenz nimmt.
Auch diese sind keine Götter.
Und ich vermute mal, dass sie sich seit Jahren schon dafür in den Hintern beißen, das sie das aufgenommen haben. Nicht umsonst ist es in der Gemeinde als Anti Pattern verschrieen.

Auch wenn ich mich hier wie ein Priester aufführe: Die Nachteile überwiegen.

Beinahe zwangsläufig:
PHP-Code:
class irgendeine
{
 public function 
tuwas()
 {
   
// hier tut die Methode ganz was wichtiges
  
Mein_Logger::getInstance()->log('Hi, habe gerade ganz was wichtiges getan!');
 }

Es wird der Tag kommen, da soll der Logger ausgewechselt werden. Oder einfach nur weggelassen. Dank der starken Abhängigkeit müssen alle betreffenden Klassen überarbeitet werden.

Auch ein Drama:
Von Singleton Klassen kann man nicht ableiten. Auch in PHP5.3 nur sehr unsauber. Ist es sinnvoll sich dieser Möglichkeit zu berauben?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #23 (permalink)  
Alt 22-10-2009, 16:23
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Wenn man mit Design Pattern arbeitet, dann ist Mein_Logger ohnehin nur eine Fassade … und somit alles dahinterliegende ohne weiteres austauschbar.

Aber offensichtlich willst du meine Beweggründe auch gar nicht verstehen …
Mit Zitat antworten
  #24 (permalink)  
Alt 22-10-2009, 16:24
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Von Singleton Klassen kann man nicht ableiten. Auch in PHP5.3 nur sehr unsauber.
Nicht dass ich Singletons gutheißen würde, aber was meinst du damit? In PHP5.3 ist es nur ein einziges self, dass man durch static austauscht. Warum ist das unsauber?

Edit: achso, ich ziehe die Frage zurück, bin grad selbst drauf gekommen

Geändert von AmicaNoctis (22-10-2009 um 16:29 Uhr)
Mit Zitat antworten
  #25 (permalink)  
Alt 22-10-2009, 16:33
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Naja..
Ich finde den Umweg über get_called_class() und dem statischen Array nicht hübsch.
PHP-Code:
abstract class Singleton
{
    private static 
$instances= array();
    
    final public static function 
getInstance()
    {
      
$class get_called_class();
      if(empty(
self::$instances[$class]))
        
self::$instances[$class] = new $class;
      return 
self::$instances[$class];
    }

    protected function 
__construct(){}
    final private function 
__clone(){}
}


class 
mytest extends Singleton
{

}

$my MyTest::getInstance();

echo 
get_class($my); 

Aber wer weiß...
Wenn du einen schöneren Weg kennst....
*verharre in freudiger Erwartung*

Edit:
Zitat:
achso, ich ziehe die Frage zurück,
zu spät gesehen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #26 (permalink)  
Alt 22-10-2009, 18:23
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Singleton instanziert sich somit selber und gibt die Referenz zurück.
Das wäre doch schonmal eine Lösung, dass ich nicht überall nochmals instanzieren muss, sondern einfach eine statische Methode anspreche.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[OOP] Klasse benötigt andere Klasse / Pfadproblem compuboy1010 PHP Developer Forum 12 11-05-2006 11:10
[OOP] Variablen in Klasse bekannt machen schneller als ... Le_Cheffe PHP Developer Forum 3 16-02-2006 14:16
[Bug] MySQL-Klasse in anderer Klasse nutzen Eagle PHP Developer Forum 48 05-03-2005 15:28
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 17:20
Klasse::Klasse --> und dann auf Attribut der Mutterklasse zurückgreifen? Pascal P. PHP Developer Forum 7 14-04-2003 20:48

Themen-Optionen
Thema bewerten
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.

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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:07 Uhr.