APF und PHP5.3-Namespaces

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Gesperrt
Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

APF und PHP5.3-Namespaces

Beitrag von Thalo » 10.09.2011, 19:19:47

Hi,

wird das APF in Zukunft auf „richtige“ Namespaces portiert werden, nun wo der 5.2 Entwicklungszweig ausgelaufen ist?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: APF und PHP5.3-Namespaces

Beitrag von dr.e. » 10.09.2011, 20:02:26

Hi Thalo,

das APF wird definitiv in Zukunft auf "richtige" Namespaces setzen. Dies hatten wir ja bereits ausführlich diskutiert und für gut befunden. Das APFunterstützt ja heute bereits "falsche" Namespaces um eine gewisse Struktur in die Code-Dateien zu bringen.

Wann der Zeitpunkt richtig ist, weiß ich (noch) nicht. Wir könnten ja mal eine Umfrage starten. :)
Viele Grüße,
Christian

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: APF und PHP5.3-Namespaces

Beitrag von Thalo » 10.09.2011, 21:06:28

Hi Doc,

ich denke für eine Umfrage ist nun ein guter Zeitpunkt. Da nun viele die Migration vornehmen, wo es keine Updates mehr für 5.2 gibt. :)

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: APF und PHP5.3-Namespaces

Beitrag von Well » 11.09.2011, 01:00:41

*Thema autoload in die Hand nehm, weit aushol und ins Thema werf*

Ich fände das noch immer super und in einem "use" steckt imho schon ein "import" drin. :)
(Wenn es keine Sonderregeln gibt sondern immer nur aus einem \my\namespace\Class ein my/namespace/Class.php wird finde ich das auch nicht allzu sehr "magisch")

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: APF und PHP5.3-Namespaces

Beitrag von dr.e. » 11.09.2011, 13:12:42

Ich habe mal die Accounts geprüft, auf denen ich private und kommerzielle, auf dem APF basierende Webseiten laufen habe. Bisher war die höchste Version 5.2.17 - kein Anzeichen von 5.3. Insofern sollten wir vielleicht versuchen, zwei Varianten anzubieten. Letzteres ist jedoch immer mit haufen weise Aufwand verbunden, da du entweder die eine oder die andere Variante generieren musst. Dies war auch schon beim Übergang von PHP4 auf PHP5 eine echte Herausforderung. Und solche Herausforderungen würde ich ungerne durch manuelle Arbeit nehmen wollen. Ich pflege aktuell auf Arbeit als Merge-Master 4 Code-Zweige ein und des selben Projektes und das ist anstrengend!
Ich fände das noch immer super und in einem "use" steckt imho schon ein "import" drin. :)
(Wenn es keine Sonderregeln gibt sondern immer nur aus einem \my\namespace\Class ein my/namespace/Class.php wird finde ich das auch nicht allzu sehr "magisch")
Ein import() muss in Zukunft dann sicher durch ein use ersetzt werden - klar. Nur autoloading ist nochmal etwas anders! Hier unterstützt PHP leider - und das ärgert mich wirklich - kein Autoloading auf Basis von Namespace + Klasse, sondern nur auf Basis des Klassen-Namens. Genau das führt dazu, dass Klassen in der Art My_Namespace_Class zu benennen sind (siehe http://de2.php.net/autoload). Insofern würde ich gerne versuchen, mit dem APF einen Mechanismus anzubieten, der auch echtes "namespace-based autoloading" anbietet.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: APF und PHP5.3-Namespaces

Beitrag von Well » 11.09.2011, 14:45:16

dr.e. hat geschrieben:Ein import() muss in Zukunft dann sicher durch ein use ersetzt werden - klar. Nur autoloading ist nochmal etwas anders! Hier unterstützt PHP leider - und das ärgert mich wirklich - kein Autoloading auf Basis von Namespace + Klasse, sondern nur auf Basis des Klassen-Namens. Genau das führt dazu, dass Klassen in der Art My_Namespace_Class zu benennen sind (siehe http://de2.php.net/autoload). Insofern würde ich gerne versuchen, mit dem APF einen Mechanismus anzubieten, der auch echtes "namespace-based autoloading" anbietet.
Da komme ich jetzt nicht so ganz mit. An die autoload Funktion wird doch immer der vollqualifizierte Klassenname übergeben. Wenn man nun die Namespaces den jeweiligen Verzeichnissen anpasst funktioniert das doch?! Was genau meinst du mit dem Beispiel "My_Namespace_Class"?

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: APF und PHP5.3-Namespaces

Beitrag von Thalo » 11.09.2011, 15:49:04


Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: APF und PHP5.3-Namespaces

Beitrag von dr.e. » 11.09.2011, 16:42:58

Hallo Well,

hier spiele ich auf das automatische Laden einer Klasse bei der ersten Benutzung an. Steht im Quellcode beispielsweise ein

Code: Alles auswählen

$file = new File(); 
dann wird der String "File" an eine Funktion __autoload() übergeben, mit der diese natürlich nicht viel anfangen kann. Aus diesem Grund haben einige Frameworks den Ansatz verfolgt, den Namespace implizit in der Klasse mitzugeben. Nehmen wir an, dass die Klasse "File" wie folgt definiert ist:

Code: Alles auswählen

namespace toolsfilesystem;

class File {

} 
Dann führt ein

Code: Alles auswählen

$file = new Tools_Filesystem_File(); 
dazu, dass der __autoload()-Funktion der String "Tools_Filesystem_File" übergeben wird und ich per Konvention einen Namespace extrahieren kann. Genau das finde ich den Benennungs-Regeln einer OO-Klasse weder zuträglich noch ein Mittel um diesem Problem richtig Herr zu werden. Notiere ich ein

Code: Alles auswählen

use toolsfilesystemFile;
$file = new File(); 
so erhält die __autoload()-Funktion ein "tools\filesystem\File" und kann daraus den korrekten Pfad rekonstruieren. Alternativ funktioniert auch ein

Code: Alles auswählen

$file = new toolsfilesystemFile(); 
Genau da möchte ich auch hin, sprich maximal import() durch use ersetzten und keine synthetischen Klassen-Namen zu Gunsten eines automatischen Autoloads erzeugen.

@Thalo: das bestätigt ein wenig meine "Befürchtungen", dass die Zeit noch nicht ganz reif ist. :(
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: APF und PHP5.3-Namespaces

Beitrag von Well » 11.09.2011, 17:34:00

Ich glaube dass ich das Problem noch immer nicht so ganz erkenne ...
hier spiele ich auf das automatische Laden einer Klasse bei der ersten Benutzung an. Steht im Quellcode beispielsweise ein

Code: Alles auswählen

$file = new File();  
dann wird der String "File" an eine Funktion __autoload() übergeben, mit der diese natürlich nicht viel anfangen kann.
Wenn ich im globalen Namespace bin würde ich so auch keine Instanz der Klasse \tools\filesystem\File sondern eine von \File erzeugen. Bin ich aber im Namespace \tools\filesystem, also

Code: Alles auswählen

namespace toolsfilesystem;
$file = new File();  
würde an die autoload Funktion auch tools\filesystem\File() übergeben werden, womit die richtige Datei eingebunden werden kann.

Dein Beispiel zur Tools_Filesystem_File() verstehe ich aber noch immer nicht so ganz. Wenn ich die folgende Klasse habe:

Code: Alles auswählen

namespace toolsfilesystem;
class Tools_Filesystem_File {
} 
kann ich im globalen Namespace mittels

Code: Alles auswählen

$file = new Tools_Filesystem_File(); 
keine Instanz davon erzeugen. Denn dann erzeuge ich eine Instanz der Klasse \Tools_Filesystem_File, während die richtige Klasse \tools\filesystem\Tools_Filesystem_File() heißen würde. Den Namespace könnte man dann zwar aus dem Namen extrahieren, eine Instanz könnte man aber, auch wenn die Datei eingebunden wurde, noch immer nicht erzeugen.

Folgendes würde natürlich funktionieren, wäre dann aber doppelt gemobbelt:

Code: Alles auswählen

namespace toolsfilesystem;
$file = new Tools_Filesystem_File(); 
denn dann würde die autoload Funktion "tools\filesystem\Tools_Filesystem_File" als Parameter erhalten.

Ich verstehe im Moment weder das Problem, dass du in Namespace + Autoload siehst, noch wie das mit dem Namespace + Autoload + Namespace_Klassennamen funktionieren soll. :?
Mein Buch zu PHP 5.3 / OOP erwähnt da aber auch kein Problem und führt die Namespace_Klassennamen Konvention / Notation auf die Kompatibilität zu PHP Versionen unter 5.3 zurück ...

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: APF und PHP5.3-Namespaces

Beitrag von dr.e. » 11.09.2011, 18:42:19

Mist, das Board verschluckt die "\" in den Namespaces, sobald ich daraus highlighted PHP-Code erstellen lasse. :(

Bei der Diskussion geht es nicht nur um die Adressierung einer Klasse innerhalb ihres Namespaces, sondern vor allem von ausserhalb. Hier möchte ich semantsich gesehen eine explizite Adressierung von Klassen (inkl. Namespace direkt oder über use) erreichen, keine implizite (Namespace im Klassen-Namen). Genau das sehe ich die "Probleme" für die Semantik des Quellcodes des Frameworks und der darauf aufsetzenden Applikationen.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: APF und PHP5.3-Namespaces

Beitrag von Well » 16.09.2011, 23:02:46

Ich muss zugegeben, so richtig verstehe ichs noch immer nicht.
Egal, vielleicht komme ich ja noch drauf bis es soweit ist. :D

Wieso sieht es dann eigentlich mit APF 2.0 aus? Würden Namespace den Versionssprung rechtfertigen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4533
Registriert: 04.11.2007, 16:13:53

Re: APF und PHP5.3-Namespaces

Beitrag von dr.e. » 16.09.2011, 23:25:42

Hi Well,

Namespaces könnte ein Grund für ein 2.0-Label sein. Anderes herum betrachtet, unterstützt das APF ja schon "Namespaces". Eine Umstellung auf ein echtes Sprach-Feature ist dabei also kein großes Hexenwerk. Einige 2.0-Themen haben wir ja bereits in 1.13/1.14 umgesetzt, insofern können wir das mit weiteren Features gerne auch im 1.x-Zweig weiter so tun. :)
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast