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
  #1 (permalink)  
Alt 23-05-2010, 02:04
Anyone
 Registrierter Benutzer
Links : Onlinestatus : Anyone ist offline
Registriert seit: May 2010
Beiträge: 8
Anyone befindet sich auf einem aufstrebenden Ast
Standard Objekte cachen oder zur Laufzeit instanzieren?

Für mein bevorstehendes Projekt arbeite ich gerade an der Entwicklung meiner kleinen Bibliothekensammlung (Framework). Anwendungen sollen später spielend leicht auf eine MVC- bzw. HMVC Basis aufbauen und dementsprechend leicht erweiterbar und austauschbar sein. Wie so oft möchte ich auf die Vorzüge des registry patterns nicht verzichten und habe mir dementsprechend eine Lösung implementiert.

PHP-Code:
<?php

/**
 * Die Registry fungiert als Ablage für verschiedene Parameter und
 * Werte. Die Registry wird dabei als Singleton angesprochen.
 */     
class Registry {
    
/**
     * Singleton Instanz
     * 
     * @static     
     * @access private
     * @var    Registry
     */                        
    
private static $instance;
    
    
/**
     * Ablage für verschiedene Komponenten
     * 
     * @access private
     * @var    Array[Key, Value]
     */                        
    
private $entries;
    
    
    
/**
     * Liefert gemäß dem Singleton-Pattern eine Instanz der
     * Klasse Registry zurück.
     * 
     * @static
     * @access public
     * @return Registry
     */                                  
    
public static function getInstance() {
        if (
self::$instance == null) {
            
self::$instance = new Registry();
        }
        return 
self::$instance;
    }
    
    
/**
     * Fügt der Ablage eine neue Komponente hinzu.    
     * 
     * @access public
     * @param  String
     * @param  Mixed
     */                         
    
public function __set($key$entry) {
        
$this->entríes[$key] = $entry;
    }
    
    
/**
     * Liest den gewünschten Eintrag aus.
     * 
     * @access public
     * @param  String
     * @return Mixed
     */                             
    
public function __get($key) {
        return 
$this->entries[$key];
    }
    
    private function 
__construct();
    private function 
__clone();
}

?>
Nach der Implementierung kam mir die Idee, Objekte nicht direkt in die registry abzulegen, sondern vielleicht in verschiedene Dateien zu abzulegen und bei Bedarf dynamisch nachzuladen.

Frage
Wäre ein Cachevorgang für Objekte in PHP überhaupt sinnvoll bzw. wie verhält sich die Idee in Hinsicht auf die Performanz bei etwas größeren Projekten?
Mit Zitat antworten
  #2 (permalink)  
Alt 23-05-2010, 02:18
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

Hallo,

ich glaube, das lässt sich so pauschal nicht beantworten. Es hängt immer davon ab, ob der Dateizugriff wirklich schneller ist als der Zugriff auf die Live-Daten. Dann kommt noch der Overhead für die Prüfung hinzu, ob die gecacheten Daten noch aktuell sind. Evtl. ist auch der APC für dich interessant?

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!
Mit Zitat antworten
  #3 (permalink)  
Alt 23-05-2010, 02:29
Anyone
 Registrierter Benutzer
Links : Onlinestatus : Anyone ist offline
Registriert seit: May 2010
Beiträge: 8
Anyone befindet sich auf einem aufstrebenden Ast
Standard

APC ist wirklich interessant, leider scheint das nicht überall standardmäßig installiert zu sein. Schade eigentlich. Vielleicht wäre es sogar besser, dem Benutzer (Entwickler) die Möglichkeit offen zu lassen, Objekte persistent zu speichern oder nicht. Ich werde mich auf jedenfall noch weiter in APC einlesen.

Vielen Dank

PS: Ist es erlaubt, stabile Versionen eines frameworks für andere Entwickler hochzuladen? Vielleicht möchte der ein oder andere später darauf zurückgreifen.
Mit Zitat antworten
  #4 (permalink)  
Alt 23-05-2010, 02:33
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 Anyone Beitrag anzeigen
PS: Ist es erlaubt, stabile Versionen eines frameworks für andere Entwickler hochzuladen? Vielleicht möchte der ein oder andere später darauf zurückgreifen.
Du meinst hier im Forum? Da gibt es die Rubrik Scripte
__________________
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!
Mit Zitat antworten
  #5 (permalink)  
Alt 25-05-2010, 15:13
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Anyone Beitrag anzeigen
Vielleicht möchte der ein oder andere später darauf zurückgreifen.
mach erst aus
Code:
private $entries;
eine
Code:
private static $entries;
passe deine __set und __get methoden entsprechend.
um die Missverständnisse zu vermeiden, mach die Methoden __set und __get 'final'
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #6 (permalink)  
Alt 25-05-2010, 15:48
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

Ich kann in Slavas Beitrag leider keine Verbesserung erkennen. Den Ansatz mit der Registry finde ich auch so schon schlecht, ob da jetzt noch was mehr statisch ist oder nicht, ist am Ende sowieso Wurscht.

Wie wäre es denn mit Inversion of Control bzw. Dependency Injection? Ist das nicht ein viel sauberer Ansatz? Vor allem kannst du dann den Code für ähnliche Aufgaben wiederverwenden, was bei diesem statischen Kram, den Singletons, Registries etc. kaum machbar ist.
__________________
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!
Mit Zitat antworten
  #7 (permalink)  
Alt 25-05-2010, 20:29
Anyone
 Registrierter Benutzer
Links : Onlinestatus : Anyone ist offline
Registriert seit: May 2010
Beiträge: 8
Anyone befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ich kann in Slavas Beitrag leider keine Verbesserung erkennen. Den Ansatz mit der Registry finde ich auch so schon schlecht, ob da jetzt noch was mehr statisch ist oder nicht, ist am Ende sowieso Wurscht.

Wie wäre es denn mit Inversion of Control bzw. Dependency Injection? Ist das nicht ein viel sauberer Ansatz? Vor allem kannst du dann den Code für ähnliche Aufgaben wiederverwenden, was bei diesem statischen Kram, den Singletons, Registries etc. kaum machbar ist.
Ich verwende doch bereits Dependency Injections. Zum Beispiel:

PHP-Code:
class IndexController implements Controller {
    public function 
execute(IRequest $requestIResponse $response) {
        
// ...
    
}

Mit Zitat antworten
  #8 (permalink)  
Alt 25-05-2010, 20:42
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 Anyone Beitrag anzeigen
Ich verwende doch bereits Dependency Injections.
Wofür ist dann diese Registry gut? Vielleicht verwendest du DI nicht durchgehend und konsequent?
__________________
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!
Mit Zitat antworten
  #9 (permalink)  
Alt 25-05-2010, 23:10
Anyone
 Registrierter Benutzer
Links : Onlinestatus : Anyone ist offline
Registriert seit: May 2010
Beiträge: 8
Anyone befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wofür ist dann diese Registry gut? Vielleicht verwendest du DI nicht durchgehend und konsequent?
Wie sollte ich denn auch Dependency Injections konsequent verwenden? Vor meinen MVC-Triaden ist ein Front-Controller geschaltet, der automatisch eine gewünschte MVC-Einheit anspricht (analysiert aus der URL) und eine von der Schnittstelle 'IController' vorgegebene Methode (execute(IRequest $request, IResponse $response)) ausführt. Wie soll ich dann bitte Objekte über Methoden (automatisch) weiterreichen lassen, wenn jedes Modul Objekte unterschiedlicher Anzahl und Typen verwenden muss?
Mit Zitat antworten
  #10 (permalink)  
Alt 25-05-2010, 23:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.604
h3ll befindet sich auf einem aufstrebenden Ast
Standard

PHP Dependency Injection
Mit Zitat antworten
  #11 (permalink)  
Alt 26-05-2010, 11:32
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ich kann in Slavas Beitrag leider keine Verbesserung erkennen. Den Ansatz mit der Registry finde ich auch so schon schlecht, ob da jetzt noch was mehr statisch ist oder nicht, ist am Ende sowieso Wurscht.
Wir können über Sinn und Unsinn von Registry, als auch über andere Entwurfsmuster sprechen, aber wenn wir uns für die Registry entscheiden, dann muss es auch funktionieren.

Ich finde es nicht besonders toll wenn die Registry in den Klassen vorkommt, die überschrieben sein können.
Bei 'fianl' Klassen oder bei 'Main' würde ich nicht gerne auf 'Registry' verzichten.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #12 (permalink)  
Alt 27-05-2010, 16:57
Anyone
 Registrierter Benutzer
Links : Onlinestatus : Anyone ist offline
Registriert seit: May 2010
Beiträge: 8
Anyone befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Danke, dieser Beitrag hat mich wirklich zum Nachdenken angeregt. Wahrscheinlich werde ich darauf zurück greifen...

PS: Könnte man vielleicht eine Art Container für Fabriken erstellen, mit denen auch zur Laufzeit neue Fabriken hinzugefügt werden können? Weil so könnte gewährleistet werden, dass man nicht ständig bestehenden Code ändern muss um neue Fabrikmethoden zu erstellen.

Edit: Irgendwie gefällt mir der Ansatz eines DI-Containers nicht wirklich gut. Ich meine, dieser ist doch dann wieder an konkrete Implementierungen gebunden?

Geändert von Anyone (27-05-2010 um 18:16 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 27-05-2010, 19:00
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.272
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hmmmnnn ... das wird aber wohl dauern bis das jeder begriffen hat ...
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #14 (permalink)  
Alt 30-05-2010, 16:56
tr-oo-per
 Registrierter Benutzer
Links : Onlinestatus : tr-oo-per ist offline
Registriert seit: May 2010
Ort: at work
Beiträge: 32
tr-oo-per befindet sich auf einem aufstrebenden Ast
Standard

Hi Anyone,

Du sagtest Eingangs, dass Du dynamisch Objekte laden möchtest, was eher an ein Plugin-Pattern erinnert. Im selben Atemzug redest Du von Caching was damit wiederum nichts zu tun hat.

Wenn ich Dich richtig verstehe, hast Du z.B. einen BuchController und einen MusikController denen Du bspw. ein nachträglich eingeführtes Kaffee-Objekt zuspielen möchtest und beiden sofort klar ist, um welches Objekt es sich handelt, was das Objekt kann und was damit zu machen ist?

Das Problem beim Factory- oder dem Plugin-Pattern ist, dass die Schnittstelle fest definiert wird. Darum wird es eher schwierig einfach mal so Funktionen hinzuzufügen, ohne dabei tiefer in den existierenden Code einzugreifen.

Gruß,
tr-oo-per
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
Singleton, Objekte übergeben oder Statische Klasse Tarlar PHP Developer Forum 35 04-03-2010 12:31
Objekt instanzieren Turbo PHP Developer Forum 2 15-08-2006 00:43
[Templates] Compilieren oder cachen ? PhilippM PHP Developer Forum 14 17-06-2006 22:07
Werden alle Objekte und 'Unter-'objekte automatisch gelöscht ? Master0Blicker PHP Developer Forum 1 26-04-2006 10:12
php zur laufzeit muarx PHP Developer Forum 2 02-03-2006 18:49

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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

Formmailer v1.6.1 Bootstrap 4

Formmailer v1.6.1 Bootstrap wurde extra für Bootstrap entwickelt. Mit Bootstrap kann man schnell und einfach kleine oder große Projekte entwickeln, die auf Geräten in allen erdenklichen Formen funktionieren.

18.12.2018 arne-home | Kategorie: PHP/ Formular
HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:30 Uhr.