Пространства имён

Содержание

Обзор пространств имён

Пространства имён введены в PHP для решения проблем в больших PHP-библиотеках. В PHP все определения классов глобальны, поэтому авторы библиотек должны выбирать уникальные имена для создаваемых ими классов. Это делается для того, чтобы при использовании библиотеки совместно с другими библиотеками не возникало конфликтов имён. Обычно это достигается введением в имена классов префиксов. Например: если мы будем использовать класс dataBase - велика вероятность, что такое имя класса будет присутствовать и в других библиотеках, а при их совместном использовании возникнет ошибка. Поэтому мы вынуждены использовать для класса другое имя. Например: ourLibraryDataBase Такие действия приводят к черезмерному вырастанию длины имён классов.

Пространства имён позволяют разработчику управлять зонами видимости имён, что избавляет от необходимости использования префиксов и черезмерно длинных имён. Все это служит повышению читабельности кода.

Пространства имён доступны в PHP начиная с версии 5.3.0. Данная секция экспериментальна и возможно будет подвержена изменениям.

Коментарии

Автор:
The keyword 'use' has two different applications, but the reserved word table links to here.

It can apply to namespace constucts:

file1:
<?php namespace foo;
  class 
Cat 
    static function 
says() {echo 'meoow';}  } ?>

file2:
<?php namespace bar;
  class 
Dog {
    static function 
says() {echo 'ruff';}  } ?>

file3:
<?php namespace animate;
  class 
Animal {
    static function 
breathes() {echo 'air';}  } ?>

file4:
<?php namespace fub;
  include 
'file1.php';
  include 
'file2.php';
  include 
'file3.php';
  use 
foo as feline;
  use 
bar as canine;
  use 
animate;
  echo 
\feline\Cat::says(), "<br />\n";
  echo 
\canine\Dog::says(), "<br />\n";
  echo 
\animate\Animal::breathes(), "<br />\n"?>

Note that 
felineCat::says()
should be
\feline\Cat::says()
(and similar for the others)
but this comment form deletes the backslash (why???) 

The 'use' keyword also applies to closure constructs:

<?php function getTotal($products_costs$tax)
    {
       
$total 0.00;
       
       
$callback =
            function (
$pricePerItem) use ($tax, &$total)
            {
               
               
$total += $pricePerItem * ($tax 1.0);
            };
       
       
array_walk($products_costs$callback);
        return 
round($total2);
    }
?>
2011-05-25 14:06:14
http://php5.kiev.ua/manual/ru/language.namespaces.html
In addition to using namespaces and closures, the use keyword has another new meaning as of PHP 5.4 - using traits:

<?php
trait Hello {
    public function 
sayHello() {
        echo 
'Hello ';
    }
}

trait 
World {
    public function 
sayWorld() {
        echo 
'World';
    }
}

class 
MyHelloWorld {
    use 
HelloWorld;
    public function 
sayExclamationMark() {
        echo 
'!';
    }
}

$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

More info here: language.oop5.traits
2015-03-26 19:04:50
http://php5.kiev.ua/manual/ru/language.namespaces.html
here is a simple example to use namespace

<?php

namespace app\a{
    class 
one{
       public static function 
_1(){
        echo 
'a one _1<br>';
       }
    }
}

namespace 
app\b{
    class 
one{
        public static function 
_2(){
            echo 
'b one _2<br>';
        }
    }
}

namespace 
app{

    echo 
a\one::_1();
    echo 
b\one::_2();
    echo 
a\two::_1();
}

namespace 
app\a{
    class 
two{
       public static function 
_1(){
        echo 
'a two _1<br>';
       }
    }
}

prints 
a one _1
b one _2
a two _1
2015-12-27 20:43:12
http://php5.kiev.ua/manual/ru/language.namespaces.html
Автор:
Tested on PHP 7.0.5, Windows
The line "use animate;" equals the line "use animate as animate;"
but the "use other\animate;" equals "use other\animate as animate;"

file1:
<?php namespace foo;
  class 
Cat 
    static function 
says() {echo 'meoow';}  } ?>

file2:
<?php namespace bar;
  class 
Dog {
    static function 
says() {echo 'ruff';}  } ?>

file3:
<?php namespace other\animate;
  class 
Animal {
    static function 
breathes() {echo 'air';}  } ?>

file4:
<?php namespace fub;
  include 
'file1.php';
  include 
'file2.php';
  include 
'file3.php';
  use 
foo as feline;
  use 
bar as canine;
  use 
other\animate;       //use other\animate as animate;
 
echo feline\Cat::says(), "<br />\n";
  echo 
canine\Dog::says(), "<br />\n";
  echo 
\animate\Animal::breathes(), "<br />\n"?>
2016-05-10 11:15:07
http://php5.kiev.ua/manual/ru/language.namespaces.html

    Поддержать сайт на родительском проекте КГБ