php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.01.2011, 20:05  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Beim Autoloading leitest du vom Klassennamen auf den Speicherort ab
Das ist ja hässlich, von einem Klassennamen auf einen Speicherort abzuleiten. Namenskonvention hin oder her, ein Klassenname sollte mir möglichst Auskunft über die Klasse selbst geben (sprich was für eine Art von Klasse etc., aber nicht deren Speicherort). Eine Verzeichnisstruktur darin zu verbergen halte ich nicht für sehr flexibel, auch wenn es sehr bequem erscheinen mag. Spätestens wenn ein Projekt etwas mehr Tiefe erhält bist du mit diesem Vorgehen relativ bald am Ende. Das ist meine Meinung.

Was spricht denn dagegen, die Klassen an der Stelle zu Laden, an der Sie benötigen werden? Eine simple Lade-Funktion würde dafür ausreichen. Schließlich werden die Lade-Routinen nicht täglich geändert (außer man wirft sein Vorgehen ständig über den Haufen). Autoloading ist zwar bequem, erachte ich allerdings nicht als unbedingt notwendig. Selbst bei einem etwas größeren Projekt.
Trainmaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.01.2011, 20:22  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Was spricht denn dagegen? Bei einer Funktion die eine Klasse lädt hast du doch nichts anderes, du musst nur ne Zeile mehr schreiben?

Ich finde Klassennamen als Pfade übrigens nicht schlecht. Teste das gerade praktisch und die Klassennamen sprechen immer noch für sich, auch die Ordnerstruktur ist übersichtlich. Das einzige Problem welches ich sehe ist, dass wenn ich z.B. ein paar zusammengehörige Klassen habe, die Hauptklasse nicht im Ordner der restlichen ist.
Example ist also unter /example.php, eine Example_Exception unter example/exception.php.

Den grossen Vorteil welchen ich aber sehe ist natürlich dass man alle Klassen sofort findet. Man muss nicht suchen, sondern weiss sofort wo sie zu finden ist.
__________________
Programming today is a race between developers striving to build better idiot-proof programs, and the universe trying to produce better idiots. So far, the universe is winning.
bitsnack ist offline   Mit Zitat antworten
Alt 30.01.2011, 20:23  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Was spricht denn dagegen, die Klassen an der Stelle zu Laden, an der Sie benötigen werden? Eine simple Lade-Funktion würde dafür ausreichen.
Letztlich hat Autoloading etwas mit der Zentralisierung des Includemanagement zu tun. Der Vorteil der Bezeichner-spezifizierten Pfadangabe liegt darin, nicht überall lokal einen relativen Pfad bestimmen zu müssen. Denn der ist bspw. abhängig von der Position des einbindenden Scripts bzw. von der Position des inkludierenden Scripts.

[edit]
Zitat:
die Hauptklasse nicht im Ordner der restlichen ist.
Example ist also unter /example.php, eine Example_Exception unter example/exception.php.
Dann machs doch wie Chriz: Benutze _ als Trennzeichen und sonst CamelCase.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 30.01.2011, 20:42  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Naja die Lade-Routine müsste dann ja wissen wo welche Klasse so rumliegt, das wiederum müsste dann erstmal wo festgehalten werden ( array oder sonstwas, von mir aus in ner db ). Da kannste aber auch gleich am anfang jeder Klassen-Datei die Klassen die diese Klasse benötigt per require_once() laden..

Was ich mir vorstellen könnte wären Collection-Requests zu stellen statt solche Katalog-Funktionen

PHP-Code:
classloader::get(array('collection' => 'views', array('commonView''userView''tasksView'))); 
Wobei zuerst der Collection Manager der Views geladen würde: collections\views\manager

Der dann wiederum die Views required

collections\view\manager::get($classloaderarray[1]);

Das einzigste was get wirklich in diesem moment tut ist einen SPL-Autoloader registrieren und mit class_exists(..., true) fragt ob die Klasse denn da sei, der kann dies entweder über eine nur ihm bekannte verzeichnisstruktur tun, oder aufgrund verschiedener von ihm registrierter struktur-schemata. Alles was über spl_autoload_register() und class_exists($classname,true) drüber hinweggeht wäre ausführungstechnisch warscheinlich genauso schnell wie eine Registry die weiß wo welche Klasse liegt.

Im Endeffekt ist ein Autoloader der Global für alles benutzt wird je nach Projektgröße eher nen selbstskalierender Stein den man sich ans bein bindet. Aktuell nutze ich halt Collection-Basierende Includes, wenn ich bestimmte Klassen aus bestimmten Packages benötige, Include ich halt das Package und sage dem Package-Manager des Packages welche Klassen ich will.

PHP-Code:
$tmp = include('smarty.package.php');
$tmp->get('smarty');
$tmp->get('smartyPreset');

$smarty = new Smarty();
smartyPreset::push($smarty); 
PHP-Code:
// smary.package.php
final class package_manager_smarty extends package_manager {
   
// ...
}

return 
package_manager_smarty::getIncludeObj(); 
Bei kleinen Projekten require_once() in jede Klassen-Datei für die Klassen die die definierte Klasse benutzt -> fertig.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 30.01.2011, 21:27  
Benutzer
 
Registriert seit: 23.05.2010
Beiträge: 59
PHP-Kenntnisse:
Anfänger
JBJHJM befindet sich auf einem aufstrebenden Ast
Standard

So an dieser Stelle vielen Dank an alle! Ich denke ich werde Tr0ys Methode ausprobieren. Auch wenn sie anscheinend ein wenig unkonventionell ist, erscheint sie mir von der logischen Seite aus betrachtet sehr sinnvoll zu sein!
JBJHJM ist offline   Mit Zitat antworten
Alt 31.01.2011, 04:44  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von JBJHJM Beitrag anzeigen
So an dieser Stelle vielen Dank an alle! Ich denke ich werde Tr0ys Methode ausprobieren. Auch wenn sie anscheinend ein wenig unkonventionell ist, erscheint sie mir von der logischen Seite aus betrachtet sehr sinnvoll zu sein!
Joa, aber wie gesagt leider PHP 5.3+ für notwendig.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y 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
Mehrere Klassen verknüpfen BlackJack01090 Software-Design 9 26.05.2009 20:43


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