[PHP] Core-Klasse - Denkanstoß

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Blackb!rd, 28. Dezember 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 28. Dezember 2010
    Core-Klasse - Denkanstoß

    Hey Leute,

    ich arbeite derzeit an einem modularen System. Der Kern des ganzen bildet meine Hauptklasse ( Der Core ) über den alle Anfragen abgewickelt werden. Der Core lädt weitere Klassen in verschiedenen Instanzen nach: Mysql-Klasse,Template-Klasse, PDF-Gen-Klasse usw... Dies soll nach meiner bisherigen Denkweise IN dem Core passieren ( $this->mysql = new mysql-klasse; $this->template = new template-klasse )
    Allerdings habe ich innerhalb der Klassen keine Möglichkeit auf die Core-Klasse zuzugreifen um zB Debug/Log Meldungen zu schmeißen.

    Hat jemand da ein Denkanstoß für mich wie ich das besser machen könnte?


    Gruß Blackbird89
     
  2. 28. Dezember 2010
    AW: Core-Klasse - Denkanstoß

    Wieso denn nicht? Da der Core ja nur einmal instanziiert werden soll, wäre das Singleton-Pattern wohl die beste wahl für diese Klasse.

    PHP:
    <? php
    class  Core
    {
        protected 
    $_instance ;
        
        protected 
    $_db ;
        protected 
    $_pdf ;
        
        
        protected function 
    __construct ()
        {
            
    $this -> _init ();
        }
        
        
        protected function 
    __clone ()
        {}
        
        
        public static function 
    getInstance ()
        {
            if (
    null  ===  self :: $_instance ) {
                
    self :: $_instance  = new  self ();
            }
            return 
    self :: $_instance ;
        }
        
        
        protected function 
    _init ()
        {
            ...
        }
        
        
        public function 
    db ()
        {
            if (
    null  ===  $this -> _db ) {
                require_once 
    'pfad/zu/db/klasse.php' ;
                
    $this -> _db  = new  DbClass (...);
            }
            return 
    $this -> _db ;
        }
        
        
        public function 
    pdf ()
        {
            if (
    null  ===  $this -> _pdf ) {
                require_once 
    'pfad/zu/pdf/klasse.php' ;
                
    $this -> _pdf  = new  PdfClass (...);
            }
            return 
    $this -> _pdf ;
        }
    }
     
  3. 28. Dezember 2010
    AW: Core-Klasse - Denkanstoß

    Du solltest dein Core-Objekt bzw. den Debugger einfach als Parameter übergeben.
    [G]dependency injection php[/G]

    Ich kann dir zum Thema noch folgendes Buch empfehlen:
    PHP Design Patterns, Stephan Schmidt;
    O'Reilly Verlag, ISBN 978-3897218642;
     
  4. 29. Dezember 2010
    AW: Core-Klasse - Denkanstoß

    ich würde dir zu nem registry-pattern raten.

    PHP:
    <? php

    final class  Core
    {
        protected static 
    $modules  = array();
        
        
    // instanzen verbieten
        
    protected function  __construct ()
        {}
        
        

        
    public static function &  getModule ( $module )
        {
            if(!isset(
    self :: $modules [ $module ]))
                
    self :: loadModule ( $module );
            
            return 
    self :: $modules [ $module ];
        }
        
        

        
    public static function  setModule ( $module $object )
        {
            
    self :: $modules [ $module ] =  $object ;
        }
        
        

        
    public static function  loadModule ( $module )
        {
            
    $tokens  explode ( '.' $module );
            
    $class   array_pop ( $tokens );
            
    $path    implode ( '/' $tokens ) .  "/ $class .class.php" ;
                
            if(!
    class_exists ( $class )) {
                if(!
    file_exists ( $path ))
                    throw new 
    Exception ( "class  $class  for module  $module  ( $path ) not found" );
                    
                require 
    $path ;
            }
            
            
    self :: $modules [ $module ] = new  $class ;
        }
    }
    PHP:
    <? php

    class  Beispiel
    {
        public function 
    __construct ()
        {
            
    Core :: getModule ( 'lib.db.Database' )-> query ( '...' );
            
            
    // oder
            
    $this -> db  Core :: getModule ( 'lib.db.Database' );
            
    $this -> db -> query ( '...' );
        }   
    }
    wobei man bei den system-klassen (database, cache, session usw.) auch auf dependency injection zurückgreifen kann. ich persönlich mach das aber nicht, weil ich in den klassen selbst entscheiden will welche komponenten gebraucht werden und welche nicht.

    für dein log-problem: einfach statisch realisieren.
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.