Hier sind einige Lösungsversuche für diejenigen, die sich über Namensraumfunktionen wundern, ohne PHP 5.3.
Zuerst muss ich sagen, nur Prefixing funktionierte für mich, die anderen Lösungen unten sind eine Art von Notizen nicht so zu gehen.
Namespace-Funktionalität kann benötigt werden, wenn Sie zum Beispiel Wordpress-Plugins erstellen, in denen Sie Ihre wertvolle Funktionsbibliothek verwenden. Normalerweise können Sie nicht mehrere Plugins mit Funktionsdeklarationen derselben Funktionen haben, dies würde fatale Fehler verursachen.
LÖSUNG 1: Präfix alle Bibliotheksfunktionen mit plugin_name_ oder namespace_
function str_len_utf8($str)
wird
function photoplugin_str_len_utf8($str)
Ist nur eine Frage der findungs ersetzen.Einfach, wenn die Funktionen sind bereits voran eindeutig:
john_str_len_utf8() => photoplugin_john_str_len_utf8()
Gut für die Seele und unterstützt das Ego, ‚johns String-Bibliothek‘: D
Wenn Sie kurz und schön Präfixe mit etwas gesunden Menschenverstand wählen, es funktioniert wie ein Zauber, wie sie sagen.
LÖSUNG 2: schließen Sie alle Ihre Bibliothek/Reeuse-Funktionen in einer Klasse ein.
Alle Funktionsaufrufe in der Klasse für die Klasse haben das Präfix $ this->. Sobald diese Klasse vorbereitet ist, kann man sie wiederholt ohne search-replace verwenden, das Ändern des Klassennamens ist genug. Verbrauch:
$photopluginlib=new photopluginlibrary();
$b=$photopluginlib->str_len_utf8($a);
LÖSUNG 3: umschließen alle Ihre Bibliothek/reeuse Funktionen in einer Klasse, und verwenden :: operator
class photopluginlib
{
static function str_len_utf8($a){ $a=self::str_clean_utf8($a); ...}
...
}
Alle Funktionsdeklarationen in der Klasse haben Schlüsselwort statische vor von Funktion.
Alle Funktionsaufrufe innerhalb der Klasse auf die Klasse mit selbst Präfix ::
Sobald dieser Klasse hergestellt wird, man es ohne verwenden können Such ersetzen. Der Klassenname ist der Namespace, eine Art von. Man ändert nur den Klassennamen und verwendet ihn als solchen.
$b=photopluginlib::str_len_utf8($a);
$c=photopluginlib::database_row(...)
Keine Instanziierung der Klasse erforderlich.
Sieht schöner als $ photopluginlib-> str_len_utf8(), aber ich ziehe noch photoplugin_john_str_len_utf8()
Hinweise
- alle Bibliotheken in 1 große Bibliothek Klassendeklaration gehen müssen, Sie Praktisch können Methoden zu Klassen später in PHP nicht hinzufügen.
- Sie können nicht einfach neue Bibliothek Funktionen hier und da in verschiedenen PHP-Dateien deklarieren.
- Wenn mehrere Bibliotheken verwendet werden und sie sich gegenseitig verwenden, müssen sie self :: for Funktionsaufrufe verwenden.
- php5.2.17, gemeinsam 2013 hat
call_user_func('photopluginlib::functionname')
nicht akzeptieren, müssen call_user_func(Array('photopluginlib','functionname'))
oder innerhalb der Klasse verwenden, call_user_func(Array(__CLASS__,'functionname'))
, die für wp add_action Code Rewrite bedeutet, preg_replace_callback usw.
- Bedürfnisse PHP> = 5
- nicht Code mischen und Funktionsdeklarationen, wie in:
class photopluginlib{ add_filter('html','myfilter'); static function myfilter($html){return ''} }
- Für großen Code, kann es schnell ein großer komplizierter Geist ben werden die.
Ich ziehe es einfach, bis die reale Sache voran verwenden, Namespaces, sind weit verbreitet.
Diese Lösungen bedeuten immer noch, dass alle Funktionsverwendungen vorangestellt werden müssen. Namespace-Funktionalität würde bedeuten, man sie Funktionen ohne prefixing verwenden können, würde das Präfix nur einmal sein, bei der PHP-Datei beginnen:
<?php
namespace photoplugin;
...
$b=str_len_utf8($a);
By the way, ein Upgrade auf PHP5.3 einen zusätzlichen Vorteil hat, wenn Sie können wähle nicht für php5.2 (immer noch überall, Jahr 2013) Php5.3 vs php 5.2.17 bedeutet sofortige Geschwindigkeitssteigerung. Es sieht aus wie% 30 etc Geschwindigkeit erhöht zur Verfügung stehen, nicht die Datenbank Seite Berücksichtigung
http://onlinephpfunctions.com/benchmarks
hoffe, das hilft einige Lösungen für diejenigen, für die Namensräume zu erreichen inspirieren.
* (Referenz) * [Anfrage für Kommentare: Namespace Separators] (http://wiki.php.net/rfc/namespaceseparator) – Gordon
@Gordon, Sie ernsthaft betrachtet ein Smilie? Ich wusste, dass die PHP-Entwickler verrückt waren, aber wirklich? –
@Aaron mit Ausnahme des Backslash, alle von ihnen sehen aus wie Gesichter für mich: D – Gordon