2011-05-30 4 views
4

Juste une question rapide sur votre préférence d'utiliser les espaces de noms PHP ou le préfixe de classe.Espaces de noms de classe PHP vs préfixes

<?php 
// ----- namespace ----- 
use My\Namespace; 
$object = new Namespace\Object; 

// ----- prefix with PR ----- 
$object = new PF_Object; //or 
$object = new PFObject; 

Quels sont les préférences des développeurs? Je sais pourquoi l'utilisation des espaces de nommage peut apporter un grand avantage aux applications, mais peut également constituer un frein à PHP selon moi.

Merci!

+0

Il est question aussi pléthorique. Probablement que les développeurs venus du monde de la programmation OOP, comme Python ou Java, préféreront le 1er plus, les autres choisiront probablement le 2ème ... Tout dépend, vous savez ... Autant de gens, autant d'opinions. – Nemoden

+0

Tous ceux qui ont utilisé un langage OOP réel sont susceptibles d'éviter la syntaxe de l'espace de noms PHP. Mais en dehors de cette préférence personnelle, c'est plus une question de savoir si vous êtes sur l'un des [5% des serveurs] (http://phpadvent.org/2010/usage-statistics-by-ilia-alshanetsky) avec php 5.3 soutien. – mario

+0

@mario 5% en utilisant PHP 5.3, c'est une statistique choquante: O –

Répondre

2

Combiner use avec un alias:

use My\Namespace\Foo as Foo; 

$object = new Foo; 

Il est également utile comme ceci:

namespace My\Debug\Stuff; 
use My\Production\Stuff\Foo as BaseFoo; 

class Foo extends BaseFoo {} 
+0

+1 bonne réponse! – Melsi

0

De toute évidence, il n'y a pas besoin d'utiliser le caractère underscore à faux namespaces plus, donc je supposons que la question se résume à "est-ce une bonne idée d'utiliser des caractères de soulignement dans les noms de classe".

IMO, la réponse est non, d'abord parce qu'il semble laid (IMO) et d'autre part parce que certains chargeurs de classe plus anciens pourraient être confondus par un nom de classe qui comprend un trait de soulignement.

0

bien si vous utilisez PHP 5.2.X vous avez seulement l'option 2

mais si vous utilisez PHP 5.3.X, vous pouvez utiliser les deux.

Dans mon cas en cours d'exécution PHP 5.3.X Je voudrais utiliser la fonctionnalité que la nouvelle version du langage offre. Pour faire une analogie est probablement courir JAVA 1.6 et ne pas utiliser de génériques (ou sorte de)

2

Pourquoi considéreriez-vous les espaces de noms un obstacle?

le préfixage de classe m'a semblé être une sorte de piratage pour implémenter «dans le code» un mécanisme pour implémenter des espaces de noms.

Le code le plus récent a maintenant la possibilité d'utiliser une manière native native de gérer les espaces de noms. C'est une approche beaucoup plus propre, à mon humble avis.

Considérons cet exemple populaire oeil-ouverture qui permet le code existant à utiliser l'espace de noms:

// Using native namespace features to shorten class prefixes 

<?php 
use Sabre_DAV_Auth_Backend_PDO as AuthBackend; 
use Zend_Controller_Action_Helper_AutoComplete_Abstract as AutoComplete; 

$backend = new AuthBackend(); 
?> 
+0

Je déteste juste le caractère utilisé pour la séparation des espaces de noms en PHP, il se sent comme votre emplacement de référence sur un système Windows. Vous avez également fait un excellent point dans la gestion des classes d'espaces de noms, merci! –

Questions connexes