SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 08.02.2009, 14:57:14
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Autoload für Klassen

Zitat:
meinst du das problem unterschiedlicher pfade ?
Nein, ich sage, dass sich __autoload() und SPL autoload gegenseitig ausschließen.
Es darf nur eine __autoload() geben, dann aber kein SPL Autoload.
Es darf aber viele SPL Autoload nebeneinander geben, dann aber keine __autoload().

Mit etwas Weitsicht entscheidet man sich doch für den universelleren Weg, oder?
Und dass bisschen zusätzliche Komplezität macht den Braten nicht fett.

Ja, ganz subjektiv:
Der Gewinn an portabilität ist riesig und wiegt den Aufwand (er ist ja auch nur 1 mal zu machen) dick und fett auf!
Das bessere ist der Feind des guten.

Geändert von DokuLeseHemmung (08.02.2009 um 15:08:13 Uhr)
Mit Zitat antworten
  #12  
Alt 08.02.2009, 15:11:22
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Autoload für Klassen

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Es darf nur eine __autoload() geben
hm, das war mir nicht bewusst - hatte die situation auch noch nicht.

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Mit etwas Weitsicht entscheidet man sich doch für den universelleren Weg, oder?
stimmt.

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Und dass bisschen zusätzliche Komplezität macht den Braten nicht fett.
das würde ich zumindest annehmen. die geschichte mit dem kleinvieh habe ich trotzdem immer im hinterkopf.

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Das bessere ist der Feind des guten
amen, bruder .-

cx
Mit Zitat antworten
  #13  
Alt 08.02.2009, 15:32:23
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Autoload für Klassen

Zitat:
die geschichte mit dem kleinvieh habe ich trotzdem immer im hinterkopf.
Richtig so.
Man darf sich davon aber nicht kirre machen lassen. Portabilität und Sicherheit sind eben "teuer".
Kann einen ja auch nix davon abhalten, beide Wege bereit zu stellen und sich dann in der realen Applikation einen davon auszusuchen.


PHP-Code:
// selbst so würde es gehen:
function __autoload($class)
{
    
LibAutoload::autoload($class);


Geändert von DokuLeseHemmung (08.02.2009 um 15:35:23 Uhr)
Mit Zitat antworten
  #14  
Alt 08.02.2009, 17:17:25
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Autoload für Klassen

Nachtrag
Für PHP5.3 und PHP6 empfehle ich diesen Autoloader:
PHP-Code:
spl_autoload_register
(
    function (
$name)
    {
        
$dirname  dirname(__FILE__);
        
$fileName str_replace('\\'DIRECTORY_SEPARATOR,$name).'.php';
        
$file     $dirname.DIRECTORY_SEPARATOR.$fileName;
        if (
is_readable($file)) require_once $file;
    }
); 
Mit Zitat antworten
  #15  
Alt 08.02.2009, 23:44:43
stfwi stfwi ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 44
Beiträge: 17
AW: Autoload für Klassen

Hi,

kurzer Erfahrungsbericht als Bestätigung: Autoload
ist bei mir vollkommen rausgeflogen - ich arbeite
ausschließlich mit Klassen und habe mir genau den
oben beschriebenen Ärger direkt zu Beginn eingefangen -
falscher Text --> falsche Klasse, fatal error in __construct(),
weil die Argumente nicht passen.
Ich denke mittlerweile, dass gerade dann, wenn Objekte
dynamisch instantiiert werden, muss man vorher einen
Blick auf die Klasse und die Vererbungsliste / Interface-
Liste der Klasse werfen, d.h. das require_once() bzw. dann
besser include_once() mit Fehlerprüfung muss einem "new"
dann eh vorausgehen. Anscheinend bietet class_implements()
dafür auch direkt ein autoload mit default=true an ;-)

PHP-Code:
   bool is_subclass_of (mixed $classNameOrInstance string $expectedBaseClass)
   array 
class_implements (mixed $classNameOrInstance [, bool $autoload=true ] ) 
Daher ist mir autoload bei new zu unsicher.
In den anderen ("statischen") Fällen sind die requires bekannt,
also auch kein autoload benötigt.

Naja, dynamische Klassen in PHP sind wohl irgendwo ein philosophisches
Thema - ob meine Ausführungen nun der ganzen und einzigen Wahrheit
entsprechen ist wohl fragwürdig, aber es ist mal eine weitere Sichtweise ...

Gruß

Stefan
__________________
inline const char const * const * operator () () const throw() { return *this; }
Mit Zitat antworten
  #16  
Alt 09.02.2009, 12:52:31
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Autoload für Klassen

Zitat:
Daher ist mir autoload bei new zu unsicher.
Das "Daher" verstehe ich nicht!

Ich verstehe auch die obrigen Probleme nicht.
Die Ursache der Sorgen liegt wohl im falschen Verständnis des Autoload Vorgangs und unglücklicher Klassenbenennungen. Also ein Struktur Problem.

Wenn man mir das Problem erklärt, will ich die Angelegenheit gerne ausbreiten.

Bisher hatte ich noch keine Sorgen mit dem Autoload.


Zitat:
Ich denke mittlerweile, dass gerade dann, wenn Objekte
dynamisch instantiiert werden, muss man vorher einen
Blick auf die Klasse und die Vererbungsliste / Interface-
Liste der Klasse werfen,
Warum?
Man kennt die Klasse doch!
ein einfaches class_exists() reicht doch völlig-
Mit Zitat antworten
  #17  
Alt 09.02.2009, 20:00:25
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Autoload für Klassen

Fühle mich jetzt leicht überfordert aber werde mich da schon reinwurschteln. Auch wenns nicht beabsichtigt war, eure Diskusion zeigt mir wenigstens gleich, was ich noch alles dabei beachten sollte.

Danke für die Anregungen und Darstellungen.
Mit Zitat antworten
  #18  
Alt 09.02.2009, 22:45:23
stfwi stfwi ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 44
Beiträge: 17
AW: Autoload für Klassen

Hi,

es läuft darauf hinaus, dass wenn ich explizit include_once() sage bekomme
ich einen abfangbaren Fehler wenn die Klasse bereits existiert, aber nicht aus
derselben Datei stammt bzw. dieselbe ist. Bei new und autoload wird die Klasse verwendet,
wenn sie da ist. In meinem Fall hatte ich im Kernscript eines klassenbasierten
Frameworks zuerst autoload verwendet. In einem der dynamischen Module wurde nun zufällig
eine Kollision der Klassennamen verursacht. Das hätte das framework abfangen
müssen, konnte es aber nicht, da die Instanz im framework erst nach dem Ausführen
des Moduls erstellt wurde - mit der falschen Klasse. Dummerweise war dann noch
Output-Buffer etc. an, so dass beim Browser nur noch eine leere Seite ankam, weil
das Script abgebrochen hat. Die Lösung war nachher einfach, aber erst mal drauf
zu kommen, dass der zufällig den selben Klassennamen verwendet hat ... ein compiler
hätte sich beschwert ;) Daher lade ich die Klassen explizit und prüfe die Schnittstellen
von dynamisch erstellten Objekten (wenn class_exists()).
Es ist wohl nicht der häufigste Anwendungsfall, aber - wie gesagt - eine Sichtweise.

Gruß

Stefan
__________________
inline const char const * const * operator () () const throw() { return *this; }
Mit Zitat antworten
  #19  
Alt 09.02.2009, 23:11:05
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Autoload für Klassen

Zitat:
wie gesagt - eine Sichtweise.

Und meine Sichtweise geht so:
Man hält sich ganz ganz strickt an das Zend bzw. Pear Benennungsschema für Klassenbezeichner. Gepaart mit ein wenig Disziplin, kann es niemals passieren, dass man 2 Klassen mit dem selben Namen hat.




Hier nachzulesen:

PHP 5:
http://framework.zend.com/manual/de/...nventions.html
http://pear.php.net/manual/de/standards.naming.php

PHP >= 5.3:
http://www.php.net/manual/de/language.namespaces.php
http://pear.php.net/manual/de/pear2cs.rules.php

Also die Klasse "DLH_Db_Adapter_Mysql" steckt dann wirklich in der Datei "./lib/DLH/Db/Adapter/Mysql.php".

Kann man zu stehen, wie man möchte, aber ich habe damit gute Erfahrungen gemacht!
1. Keine Sorgen mit doppelten Bezeichnern.
2. Nirgendwo eingestreute include o.ä.
3. einfacher universeller Autoloader
Mit Zitat antworten
  #20  
Alt 24.03.2009, 23:54:19
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Autoload für Klassen

Ich muss das Thema noch einmal aus der Versenkung holen. Der Autoload selbst funktioniert zur Zeit bei mir recht gut. Allerdings bringt das Script von Doku eine Fehlermeldung weil spl_autoload_register nicht existiert.

Theoretisch brauch ich ja nur eine neuere PHP Version aber das wird noch dauern, wenn es nicht generell unmöglich wird.

Auf Arbeit haben wir PHP in Vers. 5.0.x auf mein gemieteten Webspace hab ich leider nur Vers. 4.4.7 .
Auf Arbeit wird wohl nie eine neue Version drauf kommen, da es eher ein übrig gebliebener Server ist, bei meinem Webspace muss ich mal eine Anfrage starten ob sie den updaten.

So nun meine eigentliche Frage: Gibt es eine alternative Funktion zu spl_autoload_register?

EDIT: Ah hab gerade folgendes Gefunden: This extension is available and compiled by default in PHP 5.0.0.
Ich sehe nun zumindest für Arbeit einen Lichtblick

Geändert von urvater (25.03.2009 um 00:31:18 Uhr) Grund: siehe Edit
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
arrays in klassen ohne Initialisierung? Thomas H. PHP Grundlagen 3 08.08.2007 01:47:17
Klassen - Anwendungsgebiete pascala PHP Grundlagen 2 29.03.2007 04:25:53
Klassen einbinden... Zip PHP für Fortgeschrittene und Experten 2 22.10.2006 21:25:40
verebung in klassen waoo PHP für Fortgeschrittene und Experten 3 02.03.2005 16:09:07
Was sind eigendlich Klassen? mad-boy PHP für Fortgeschrittene und Experten 4 16.12.2002 19:07:16


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt