php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.10.2007, 15:06  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard Funktion überschreiben

Ich schreibe mir derzeit ein eigenes kleines system, dieses ist so aufgebaut:

|-CORE
+-- Wichtige Systemdateien

|- APP
+-- Config
---|+ ---- .......
+-- template
+-- helper
+-- classes
+-- core <- soll dazu

nun möchte ich ich das es einen weiteren ordner im app verzeichniss gibt, in diesem kann man den verzeichnissbaum der CORE optional nachbilden, falls dort funktionen angelegt werden, möchte ich realisieren, dass diese bevorzugt behandelt werden, also funktionen ergänzt bzw überschrieben werden.

damit möchte ich erreichen, dass man um aufs system einzugreifen nichts an dem kernel (core) macht, sondern spezifsch für jede appl. die core im notfall anpassen kann.


dazu habe ich 2 fragen;
1. ist meine überlegung falsch oder gibt es bereits bessere methoden für diese problematik ?
2. gibt es eine möglichkeit funktionen zu überschreiben ?
notyyy ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.10.2007, 16:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Funktionen können genau wie Klassen und Konstanten nicht überschrieben werden.

Vielleicht kannst du dir aber die Möglichkeit zunutze machen, vererbte Methoden zu überschreiben oder aber du entwickelst eine include-Logik um zuerst im APP/Core/ nachzusehen, bevor du etwas aus Core/ includest. Ganz einfach könntest du das regeln, in dem du APP/Core/ in der include-Liste vor Core/ setzt. Könnte auch danach sein, einfach ausprobieren.

Die Idee an sich ist in Ordnung, du biegst eben Vererbung auf Funktionsebene um. Die Idee ist gut, die Technik schlecht, da eigentlich schon gelöst. Aber ob das konkret bei dir sinnvoll ist, musst du anhand deines Funktionsumfanges selber wissen. Funktionen benutz ich fast garnicht mehr, set_error_handler(), __autoload(), sowas fliegt bei mir noch im functions/ Ordner herum.

Im Prinzip lösen das Frameworks so:
Du hast komplett abstrakte Klassen, die du über Konfiguration auf dein Problem biegen kannst.
Dein Projekt liefert jetzt nurnoch die Konfiguration und ein paar Klassen, die die abstrakten Lösungen zum projekt-spezifischen Problem vereinen.

Insofern wäre es geschickter, die Core/ Daten abstrakt zu halten und zu nutzen, anstatt sie zu überschreiben.
Zergling-new ist offline   Mit Zitat antworten
Alt 25.10.2007, 16:51  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Funktionen können genau wie Klassen und Konstanten nicht überschrieben werden.
Ähm seh ich das jetzt falsch oder gibt es override_function() ??

http://de2.php.net/manual/de/functio...e-function.php
cycap ist offline   Mit Zitat antworten
Alt 25.10.2007, 16:52  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo notyyy,

schau dir mal CakePHP an, bzw. CodeIgniter, die realisieren soetwas ähnliches. Sollte unter einem apps-Ordner eine spezielle Komponente sein, wird diese durch eine Service-Instanz verwendet, wenn nicht, wird die aus core genommen. Dabei ist aber zu beachten, das nur manche Komponenten so "überlagert" werden können. Die core-Funktion muss natürlich ausgeschlossen sein.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 25.10.2007, 17:01  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

moment, es geht nicht darum methoden/klassen für die verwendung zu beschaffen, dies ist bereits realisiert.

es geht darum wirklich "kernel" funktionen austauschen zu können, womit man das ganze system ausser kraft setzen könnte.
d.h. man müsste in einer classe eine oder 2 funktionen tauschen, das problem hierbei ist, das klassen anders als array sich auch wenn die einmal geschlossen sind, nichtmehr öffnen lassen.

ich will das ganze nur für den absoluten notfall realisieren, da man eigentlich nicht in die CORE eingreifen sollte, zumal diverse appli. eine CORE verwenden können.
notyyy ist offline   Mit Zitat antworten
Alt 25.10.2007, 17:42  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

override_function ist PECL
http://de.wikipedia.org/wiki/PHP_Ext...ion_Repository

Zitat:
moment, es geht nicht darum methoden/klassen für die verwendung zu beschaffen, dies ist bereits realisiert.

es geht darum wirklich "kernel" funktionen austauschen zu können
Da du Funktionen wie erwähnt nicht überschreiben kannst, ist es ja letztlich doch ein Beschaffungs-Problem, oder versteh ich dich noch nicht richtig?
Zergling-new ist offline   Mit Zitat antworten
Alt 25.10.2007, 18:05  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

würde ich jetzt nicht so nennen, aber ich weiss auch nicht was du unter einem beschaffungsproblem verstehst ?

ich könnte vom user verlangen die komplette datei anzupassen, wobei ich damit nicht wirklich glücklich wäre.

kann man nicht aus X klassen 1 machen und die priorität der funktionen festlegen ?


gibt es alternativ lösungsansetze ?
notyyy ist offline   Mit Zitat antworten
Alt 25.10.2007, 18:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich würde vorschlagen du verzichtest auf deine coolen Benennungen Core, Kernel etc. und machst mal ein Beispiel
Zergling-new ist offline   Mit Zitat antworten
Alt 25.10.2007, 19:54  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

da ich ja auch nichts vom code sehe und ich von deinen posts annehmen muss, dass der core nur in einer instanz existieren kann/sollte, kann ich dir nurnoch ein "notfallsystem" dieser art vorschlagen:

das script benutzt immer eine wrapper klasse:

PHP-Code:
class normal
{
          public function 
__construct(core $core_instance)
          {
                 
$this->core_instance=$core_instance;
          }

          public function 
ich_bin_ein_wrapper()
          {
                  
$this->core_instance->ich_bin_ein_wrapper();
          }
}

class 
notfall
{
          public function 
__construct(core $core_instance)
          {
                 
$this->core_instance=$core_instance;
          }

          public function 
ich_bin_ein_wrapper()
          {
              
/*  irgendwas anderes tun */
          
}
}

if(!
$notfall$klasse=new normal($core);
       else 
$klasse=new notfall($core); 
sollte man wieder erwarten eine funktion überschreiben müssen kann man auf notfall oder andere wrapper klassen zurückgreifen. dazu muss im core natürlich alles public sein.....
im großen und ganzen ist das jetzt schon verwirrend und zu umfangreich für meinen geschmack und je nach der anzahl der "notfälle" mit unter nur schwerstens instandzuhalten.....außerdem brauchst du natürlich für jeden "notfall" eine eigene wrapper klasse....

ich frage mich, aber auch welchen tieferen sinn es haben könnte.....ansonsten würde ich es auch unter designfehler verbuchen....

gruß
brian johnson ist offline   Mit Zitat antworten
Alt 25.10.2007, 19:58  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

gut, ich dachte es wäre so am "einfachsten"
ich habe alles dynamische und projektspezifische von dem framework möglichst getrennt.
CORE < so habe ich den ordner genannt, in dem das hauptsystem untergebracht wird.
APP < spezifische daten, bilder, templates, controller, u.s.w.

das hat den sinn das mehrere Webseiten auf einen CORE ordner später laufen, so gibt es nur einmal die hauptfunktionen.

da ich meinem prinzip treu bleiben will, kaum vorgaben zu haben, möchte ich den user nun ermöglichen in der applikation CORE elemente zu tauschen und diese zu benutzen.... (nur auf dieser einen "webseite")





beispiel:
du hast 2 projekte, beide liegen auf dem selben server, du hast 1 core ordner, 2 projektordner.

in projekt 2 läuft was nicht richtig, du merkst, dass du definitiv im system eingrafen musst (im CORE) in projekt 2 kannst du nun einfach die funktion des CORE oderners "tauschen"
notyyy ist offline   Mit Zitat antworten
Antwort


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
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Array in rekursiver Funktion auslesen Gumfuzi PHP Tipps 2007 17 15.11.2005 12:01
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
Funktion() anwendung -bitte um Hilfe PHP Tipps 2004-2 17 08.12.2004 11:58
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php funktion überschreiben, php funktionen überschreiben, php methoden überschreiben, php methode überschreiben, php function überschreiben, php überschreiben, funktion überschreiben php, methoden überschreiben php, php functionen überschreiben, php klasse überschreiben, methode überschreiben php, funktionen überschreiben php, php klassen überschreiben, php class überschreiben, function überschreiben php, überschreiben php, php datei überschreiben, php this überschreiben, php klassen methoden überschreiben, php klasse funktion überschreiben

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:27 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.