php5 и пространство имен? - PullRequest
3 голосов
/ 12 октября 2010

Я много работаю в PHP, но никогда не понимаю метод пространства имен в PHP.Может ли кто-нибудь помочь мне здесь?Я прочитал на сайте php.net, что он недостаточно хорошо объяснен, и я не могу найти примеры на нем.

Мне нужно знать, как я могу сделать код в демонстрационной версии.

  • пространство имен: образец
    • класс: sample_class_1
      • функция: test_func_1
    • класс: sample_class_2
      • функция: test_func_2
      • функция: test_func_3

1 Ответ

4 голосов
/ 12 октября 2010

Как это?

<?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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...