php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.07.2007, 13:00  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard Klassensammlung über ein Objekt zur Verfügung stellen

Liebe PHP'ler,

ich habe eine fixe Idee, weiß aber nicht, ob so etwas überhaupt möglich oder
sinnvoll ist. Ich möchte eine Sammlung von Klassen über ein Objekt
zur Verfügung stellen. Dabei unterteile ich unterschiedliche Klassen in
einzelne Dateien (klasse.class.php) und möchte dann schreiben.

PHP-Code:
<?php
$helper 
= new helper();
$helper->call_classes'params, forms' );
?>
Und stelle mir dann vor, dass ich über die Klasse call_classes die jeweiligen
Klassen anschubse und mit die jeweiligen Methoden im Objekt $helper
zur Verfügung stehen. Ist das unsinnig so etwas zu machen oder ist das
technisch gar nicht möglich? Bis jetzt hat es noch nicht funktioniert. Ich
hatte mir das so gedacht, dass

PHP-Code:
<?php
function call_classes$class 
{
    
$classes     explode','$class );
    foreach( 
$classes as $class 
    {
        
$file dirname(__FILE__) .'/classes/'strtolowertrim$class ) ) .'.class.php'
        if( 
file_exists$file  ) ) 
        {
            include_once( 
$file  );
        } 
        else 
        {
            
$this->_error['call'][] = 'class ' .  $class .' don\'t exist'
        }
    }    
}
?>
Das scheint nicht wirklich zu funktionieren, habt ihr das eine Lösung oder
sollte ich lieber von dieser Idee Abstand nehmen?
ecomeback ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.07.2007, 13:24  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Schau mal nach Factory-Pattern. Soweit ich dich verstanden habe, entspricht es deiner gewollten Funktionalität.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 10.07.2007, 13:29  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo und willkommen hier im Forum!
Zunächsteinmal solltest du deine Absicht erklären.

Wenn du auf Komfort aus bist, solltest du eine __autoload-Funktion erstellen:
http://www.php.net/__autoload
Diese lädt dir benötigte Klassen zur Laufzeit (ohne eigenes Hinzutun).

Wenn du deine Helper->call_classes() behalten möchtest, würde ich die Klassennamen wohl eher Parameter-weise übergeben:
PHP-Code:
<?php
function helper()
{
  
$classes func_get_args();
  foreach (
$classes as $class) {
    @require_once 
'mein/pfad/zu/den/klassen/'.$class.'.class.php';
    if (!
class_exists($class)) {
      
// fehler
    
}
  }
}
?>

Übrigens so ganz verstehe ich nicht warum du überhaupt die ganzen Klassen in einem Objekt sammeln möchtest. Willst du einen künstlichen Namespace erzeugen, oder die Kontrolle über die Anzahl der Instanzen (siehe Singleton-Pattern) behalten?
Zergling-new ist offline  
Alt 10.07.2007, 14:14  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Danke. Da gab es gleich einiges zu lernen. Pattern, __autoload, func_get_args.
Um erst einmal einen kleinen Überblick zu bekommen, habe ich mir das mal auf die Schnelle angesehen. Bin natürlich noch nicht ganz durch, aber da gibt es ja auch ne Menge zu entdecken.

Zunächst bin ich nicht von einem bestimmten Pattern etc. ausgegangen, sondern hatte die Idee, dass es sinvoll sein könnte sich über ein Objekt eine Schnittstelle auf andere Klassen zu schaffen, die sich leicht einbinden lassen. Ist das mit "künstlichen Namespace" gemeint. Sorry, aber mit diesen Fachbegriffen ist es erst einmal nicht so weit her.

Ich habe ein paar der Ideen eingebaut und muss mich da erst noch weiter einlesen, die Klassen werden auf jeden Fall geladen, nur weiß ich nicht wie man die Klassen in den inkludierten Dateien über das Objekt anspricht. Die Klassen dürfen ja nicht so heißen wie die "Stammklasse" aber die Funktion wird nicht gefunden, wenn ich die Klassen in den Dateien über $helper->tuwas(); ansprechen möchte. Irgendwie kann ich mir schon vorstellen, dass das nicht so einfach funktioniert, aber auch da gibt es doch bestimmt eine Lösung, die ich noch nicht auf dem Schirm habe?
ecomeback ist offline  
Alt 10.07.2007, 17:30  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Achje, ich hab nun eine ganz Zeit lang sehr viel ausprobiert, aber ich bekomme es nicht hin über das einmal erstelle Objekt Zugriff auf die anderen Klassen zu bekommen.

Mir wird jedes Mal auf Neue verkündet, dass
Fatal error: Call to undefined method helper::_foo()
Ist ja klar, dass ich ohne mein Zutun nicht einfach die Funktion aus der externen Klasse als Methodenaufruf des Objekts verwenden kann. Allerdings komme ich da kein Stück voran. Die Klassen werden includiert, aber das reicht natürlich noch nicht. Ich möchte als über das Objekt $helper direkt Methoden der anderen Klassen im Stile von $helper->_foo(); ansprechen.

Geht das überhaupt oder wie muss man an die Sache herangehen?
Mag ja auch sein, dass ihr mich falsch verstanden habt und ich hier etwas zu zaubern versuche, was so nicht funktionieren kann.
ecomeback ist offline  
Alt 10.07.2007, 23:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
also ich glaube du hast dich da in etwas verrannt. Du möchtest beliebige Objekte mit beliebigen Methoden über eine zentrale Helper-Klasse ansprechen, habe ich das richtig verstanden?

Dann mache dich vertraut hiermit:
http://www.php.net/manual/de/languag...verloading.php
http://www.php.net/manual/de/languag...reflection.php
Möglicherweise noch dies hier:
http://www.php.net/call_user_func_array

Reflections sind sehr mächtig, allerdings rate ich dir von deinem Vorhaben ab.
Welchen Vorteil soll es denn haben, das ganze über eine Helper-Klasse zu leiten? Du hast nichts als prüfenden und ausführenden Overhead, der zusätzlich keinen Vorteil schafft, sondern eigentlich nur Verwirrung.
Ich kenne auch niemanden, der so verfährt, was ein zwei Schlussfolgerungen zulässt: Du bist ein Genie oder auf dem Holzweg! Nicht bös gemeint - nur ein Tipp!

Weiterer Lesestoff hier:
http://de.wikipedia.org/wiki/Abstrakte_Fabrik
http://de.wikipedia.org/wiki/Erzeugungsmuster
http://de3.php.net/manual/de/languag...interfaces.php
Zergling-new ist offline  
Alt 11.07.2007, 16:16  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Da ich es unbedingt ausprobieren wollte, habe ich es sogar geschafft mit Hilfe von _call und call_user_func_array innerhalb der helper Klasse eine Methode zu basteln, die mir den Zugriff auf die anderen Methoden erlaubt. Das Hauptproblem dabei war und ist die jeweilige Klasse anzusprechen. Ich konnte das nur mit einem Array lösen, dass alle Methoden der jeweilgen Klasse sammelt und jeweils über __call und die Methode mir die zugehörige Klasse aus dem Array sucht. Nicht gerade schön.

Die Idee war so etwas wie Unterklassen zu bilden, diese Unterklassen aus Datei auszulagern und über ein Objekt jeweils auf die Klassen zugreifen zu können. Das hat für mich den Vorteil, dass ich nicht zig Objekte sondern nur eins habe, wobei ich zusätzlich festlegen kann, welche Klasse ich laden möchte oder nicht. Weiterhin können so sehr einfach neue Pakete hinzugefügt werden und die einzelnen Klassen lassen sich thematisch etc. ordnen. Ob nun Holzweg oder Genie, für so blöde halte ich die Idee an sich nicht. Scheinbar scheint es so etwas auch zu geben, aber mit diesen Fabriken komme ich noch nicht wirklich klar. Da fehlt mir einfach die Erfahrung, bin doch erst seit einer Woche im PHP Rausch. Wenn ich dann noch einen Blick in die Reflections werfe falle ich fast hinten über.
ecomeback ist offline  
Alt 14.07.2007, 00:01  
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 ecomeback,

ich rate dir dein Vorhaben zu verwerfen und das über die hier bereits genannten Pattern (insbesondere das Factory-Pattern) zu realisieren. Das bringt zum einen eine bessere Lesbarkeit in deine Scripten, zum anderen hälst du dich damit an de facto Standards, die schon 1000 Mal erprobt sind.
__________________
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  
 


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
Objekt im GET-Query wird nicht übertragen Ralpho PHP-Fortgeschrittene 10 05.05.2008 10:03
Objekt als ComboBox behandeln Nalincah PHP Tipps 2008 2 08.11.2007 03:52
Objekt wird auf einem Server akzptiert auf anderem nicht nieselfriem PHP Tipps 2006 3 10.07.2006 01:46
PHP-Object (klasseninstanz) als Objekt an WS übergeben. joni1980 PHP-Fortgeschrittene 2 10.05.2006 11:25
Zugriff auf verschachteltes Objekt aus Funktion FloMX PHP-Fortgeschrittene 10 28.03.2006 17:01
Objekt in Session übergeben jacos PHP Tipps 2006 2 21.02.2006 00:11
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05
Objekt übergeben Fatal Error PHP Tipps 2007 5 28.12.2005 14:43
kann ein Objekt sich selbst zerstören? ajo_silent PHP Tipps 2007 5 16.12.2005 18:52
Objekt in Array ablegen PHP-Fortgeschrittene 9 18.08.2005 14:35
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13
[Klassen] Untereintrag für Objekt erzeugen? DannyD PHP Tipps 2005 5 17.02.2005 18:13
Klicks auf ein Objekt zählen und auslesen!? Beitragsarchiv 2 15.02.2005 16:27
Objekt in einer Session suter PHP Tipps 2004-2 2 13.12.2004 17:33
objekt und collection PHP Tipps 2004-2 2 17.11.2004 08:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php klassensammlung, klassensammlungen, sammlung zur verfügung stellen, php com objekt welche funktionen stehen zu verfügung, stellen php, elternmitteilung klassensammlung

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