Ich versuche zu vermeiden, Funktionen im globalen Namespace insgesamt zu deklarieren. Die sehr seltenen Gelegenheiten, bei denen ich das tue, ist, wenn Userland-Implementierungen von Funktionen hinzufügen, die nicht in meiner Version von PHP sind zum Beispiel
if(false === function_exists('lcfirst'))
{
function lcfirst($str) { /* ... */}
}
Funktionen wie diese in einem compatibility.php gehen könnte, die in einem enthalten würde Bootstrap-Datei, so dass sie in der gesamten Anwendung verfügbar sind und die Überprüfung auf function_exists
stellt sicher, dass ich nicht auf Probleme stoßen, sobald die PHP-Version native Unterstützung für die Funktion hat.
Für alle anderen Funktionen würde ich versuchen zu sehen, ob sie nicht auf ein bestimmtes Objekt zuerst gehen können. Normalerweise sind "zufällige" Funktionen einfach fehl am Platz.Sehen Sie sich an, welche Objekte Ihre Utility-Funktionen verwenden und sehen Sie, ob Sie die Methoden dorthin verschieben können. Vielleicht wartet eine Superklasse darauf, herauszukommen. Siehe auch Information Expert pattern.
Wenn keine Objekte vorhanden sind, können diese Methoden weiterhin in einem statischen Modul mit dem Namen Utils in einem eindeutigen Namespace gruppiert werden, sodass sie den globalen Namespace nicht überladen. Auf diese Weise können Sie sicher sein, dass Sie nicht mit anderen Funktionen von Drittanbietern im globalen Bereich kollidieren.
Vor 5.3, würde ich gruppieren following the PEAR naming convention und prefixing Klassennamen nach Ihrer Ordnerstruktur, zum Beispiel, wenn das Modul in com/mattmueller/utils.php
war, Sie
class Com_MattMueller_Utils
{
public static function something($a, $b) { /* ... */ }
}
Ab PHP5.3 verwenden würden, wir habe bekam echte namespaces und Sie können
namespace com\mattmueller\Utils;
class Utils
{
public static function something($a, $b) { /* ... */ }
}
tun In Javascript können Sie nicht Namensräumen haben aber easily simulate them durch die Funktionen zu einem Objekt hinzufügen, zB
// JavaScript
var com = (com) ? com : {};
com.mattmueller = {
'Utils': {
'something' : function(a,b) { /* ... */ }
}
};
Die gemeinsamen Rahmen in der Regel Funktionen implementieren als auch für creating namespaces.
Super! Danke für die Einblicke. Yah Ich wünschte wirklich, ich könnte PHP Namespaces verwenden, aber mein Hosting hat noch nicht 5.3. – Matt
@Matt, Sie können immer noch mit dem PEAR-Ansatz, den ich notiert habe, gehen oder einfach einen Klassennamen verwenden, der nicht kollidiert, wie "MMUtils", wenn Sie den Domainnamen-basierten Klassennamen zu lang finden. – Gordon