Namespaces sind ein Programmiersprachenmechanismus zum Organisieren von Variablen, Funktionen und Klassen. PHP 5.3 fügt Unterstützung für Namespaces, die ich im folgenden Beispiel demonstrieren werden:
Sagen Sie möchten, dass zwei Projekte kombinieren, die den gleichen Klassennamen Benutzer, verwenden aber unterschiedliche Implementierungen der einzelnen:
// Code for Project One (proj1.php)
<?php
class User {
protected $userId;
public function getUserId() {
return $this->userId;
}
}
$user = new User;
echo $user->getUserId();
?>
// Code for Project Two (proj2.php)
<?php
class User {
public $user_id;
}
$user = new User;
echo $user->user_id;
?>
<?php
// Combine the two projects
require 'proj1.php';
require 'proj2.php'; // Naming collision!
$myUser = new User; // Which class to use?
?>
Für Versionen von PHP weniger als 5.3, würden Sie sich die Mühe der Änderung den Klassennamen für alle Instanzen der Klasse Benutzer, die von einem der Projekte gehen müssen, um einen Namen Kollision zu verhindern:
<?php
class ProjectOne_User {
// ...
}
$user = new ProjectOne_User; // Code in Project One has to be changed too
?>
Für PHP-Versionen größer oder gleich 5,3, können Sie Namespaces verwenden, wenn Sie ein Projekt erstellen, indem Sie eine Namespace-Deklaration hinzu:
<?php
// Code for Project One (proj1.php)
namespace ProjectOne;
class User {
// ...
}
$user = new User;
?>
<?php
// Combine the two projects
require 'proj1.php';
use ProjectOne as One; // Declare namespace to use
require 'proj2.php' // No collision!
$user = new \One\User; // State which version of User class to use (using fully qualified namespace)
echo $user->user_id; // Use ProjectOne implementation
?>
Für weitere Informationen:
sehr gut illustriert, mit Kommentaren und Code. +1 –
Einverstanden. Sehr gut gemacht. Ich wünschte nur, sie gingen mit einem anderen Trennzeichen zwischen Namespace und Klasse. :( –
Mit dem ganzen Begrenzer Greifen: es wird völlig in Ordnung funktionieren, wenn Sie nur einzelne in Anführungszeichen Saiten verwenden, die ich für jeden String in PHP mit Ausnahme von Zeilenumbrüchen –