2010-10-12 88 views
3

我在PHP中工作很多,但我从来没有真正理解PHP中的名称空间方法。有人可以帮我吗?我在php.net的网站上看过它没有解释得很好,我找不到它的例子。php5和命名空间?

我需要知道如何在示例版本中创建代码。

  • 名称空间:样品
    • 类:sample_class_1
      • 功能:test_func_1
    • 类:sample_class_2
      • 功能:test_func_2
      • 功能:test_func_3

回答

4

喜欢这个?

<?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(); 
} 

如果您在另一个文件是你不需要调用namespace {进入根命名空间。所以,想象下面的代码是另一个文件“ns2.php”,而原来的代码是“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

冈井,所以我需要使用的项目命名空间中的我之前使用“命名空间”? – ParisNakitaKejser 2010-10-12 16:48:52

+0

我问becures我想要命名空间调用indsite我现在有一个类,当我需要使用这个命名空间像一个fremawork,:) – ParisNakitaKejser 2010-10-12 16:54:17

+1

它的工作方式是,每个类(和函数,和变量)住命名空间内。如果您不使用“namespace”关键字,则假定您位于根名称空间中。如果你想使用来自不同命名空间的项目(例如,当你处于“sample_2”或根目录时,来自“sample”的类),则必须使用其全名(例如'sample \ Sample_class_1' )或将它导入到你当前的命名空间(使用'use'sample \ Sample_class_1';') – 2010-10-12 17:32:02