2010-10-12 10 views
3

Je travaille beaucoup en PHP mais je ne comprends jamais vraiment la méthode namespace en PHP. Quelqu'un peut-il m'aider ici? J'ai lu sur le site de php.net qu'il n'est pas assez bien expliqué, et je ne trouve pas d'exemples dessus.php5 et espace de noms?

J'ai besoin de savoir comment je peux faire du code dans une version d'échantillon.

  • espace de noms: échantillon
    • Classe: sample_class_1
      • fonction: test_func_1
    • Classe: sample_class_2
      • fonction: test_func_2
      • Fonction: test_func_3

Répondre

4

Comme cela?

<?php 

namespace sample 
{ 
    class Sample_class_1 
    { 
     public function test_func_1($text) 
     { 
      echo $text; 
     } 
    } 

    class Sample_class_2 
    { 
     public static function test_func_2() 
     { 
      $c = new Sample_class_1(); 
      $c->test_func_1("func 2<br />"); 
     } 

     public static function test_func_3() 
     { 
      $c = new Sample_class_1(); 
      $c->test_func_1("func 3<br />"); 
     } 
    } 
} 

// Now entering the root namespace... 
// (You only need to do this if you've already used a different 
// namespace in the same file) 
namespace 
{ 
    // Directly addressing a class 
    $c = new sample\Sample_class_1(); 
    $c->test_func_1("Hello world<br />"); 

    // Directly addressing a class's static methods 
    sample\Sample_class_2::test_func_2(); 

    // Importing a class into the current namespace 
    use sample\Sample_class_2; 
    sample\Sample_class_2::test_func_3(); 
} 

// Now entering yet another namespace 
namespace sample2 
{ 
    // Directly addressing a class 
    $c = new sample\Sample_class_1(); 
    $c->test_func_1("Hello world<br />"); 

    // Directly addressing a class's static methods 
    sample\Sample_class_2::test_func_2(); 

    // Importing a class into the current namespace 
    use sample\Sample_class_2; 
    sample\Sample_class_2::test_func_3(); 
} 

Si vous êtes dans un autre fichier que vous n'avez pas besoin d'appeler namespace { pour entrer dans l'espace de noms racine. Alors, imaginez le code est un autre fichier ci-dessous « ns2.php » alors que le code original était « ns1.php »:

// Include the other file 
include("ns1.php"); 

// No "namespace" directive was used, so we're in the root namespace. 

// Directly addressing a class 
$c = new sample\Sample_class_1(); 
$c->test_func_1("Hello world<br />"); 

// Directly addressing a class's static methods 
sample\Sample_class_2::test_func_2(); 

// Importing a class into the current namespace 
use sample\Sample_class_2; 
sample\Sample_class_2::test_func_3(); 
+0

Okai, donc je besoin d'utiliser « espace de noms » avant l'utilisation des éléments dans l'espace de noms? – ParisNakitaKejser

+0

je demande car je veux l'appel d'espace de noms indsite une classe que j'ai maintenant quand j'ai besoin d'utiliser cet espace de noms comme un fremawork, :) – ParisNakitaKejser

+1

La façon dont cela fonctionne est, chaque classe (et fonction, et variable) vit dans un espace de noms. Si vous n'utilisez pas le mot clé "namespace", il suppose que vous êtes dans l'espace de noms racine. Si vous souhaitez utiliser des éléments d'un espace de noms différent (par exemple une classe de "sample" lorsque vous êtes dans "sample_2" ou dans la racine) vous devez soit l'adresser par son nom complet (par exemple 'sample \ Sample_class_1') ou l'importer dans votre espace de noms actuel (en utilisant 'use 'sample \ Sample_class_1"; ') –