Рабочая тетрадь(4)
.pdf
namespace A\B\C;
class Exception extends \Exception {}
$a = new Exception('hi');
// $a - объект класса A\B\C\Exception
$b = new \Exception('hi');
// $b - объект класса Exception
$c = new ArrayObject; /* fatal error,
класс A\B\C\ArrayObject не найден */
Qualified name
global.php (include 'project.php')
project.php (include 'subproject.php')
subproject.php
▪namespace Project\Sub
class Connection { /* ... */ }
В пространстве Project (project.php)
▪$obj = new Sub\Connection();
В глобальном пространстве (global.php)
▪$obj = new Sub\Connection /* ERROR */
▪$obj = new Project\Sub\Connection();
File-1.php
namespace Foo\Bar\subnamespace; const FOO = 1;
function foo() {}
class foo { static function baz() {} }
File-2.php
namespace Foo\Bar; include 'file-1.php'; const FOO = 2; function foo() {}
class foo { static function baz() {} }
subnamespace\foo(); // Foo\Bar\subnamespace\foo()
subnamespace\foo::staticmethod();
//Foo\Bar\subnamespace\foo::baz
echo subnamespace\FOO; // Foo\Bar\subnamespace\FOO
Fully qualified name
global.php (include 'project.php')
project.php (include 'subproject.php')
subproject.php
▪namespace Project\Sub
class Connection { /* ... */ }
Везде
▪$obj = new \Project\Sub\Connection();
File-1.php
namespace Foo\Bar\subnamespace; const FOO = 1;
function foo() {}
class foo { static function baz() {} }
File-2.php
namespace Foo\Bar; include 'file-1.php'; const FOO = 2; function foo() {}
class foo { static function baz() {} }
\Foo\Bar\foo(); // Foo\Bar\foo()
\Foo\Bar\foo::staticmethod(); // Foo\Bar\foo::baz
echo \Foo\Bar\FOO; // Foo\Bar\FOO
class СlassName{
function __construct() { echo __METHOD__; }
}
function funcName() { echo __FUNCTION__; }
const CONST_NAME = "GLOBAL";
$a = 'ClassName';
$obj = new $a; // ClassName::__construct
$b = 'funcName';
$b(); // funcName
echo constant('CONST_NAME'); // GLOBAL
namespace NS;
class СlassName{
function __construct() { echo __METHOD__; }
}
function funcName() { echo __FUNCTION__; }
const CONST_NAME = "NS";
include 'глобальный код без пространства имен';
$a = 'ClassName';
$obj = new $a; // ClassName::__construct
$b = 'funcName';
$b(); // funcName
echo constant('CONST_NAME'); // GLOBAL
namespace NS;
class СlassName{
function __construct() { echo __METHOD__; }
}
function funcName() { echo __FUNCTION__; }
const CONST_NAME = "NS";
include 'глобальный код без пространства имен';
$a = 'NS\ClassName'; // можно \NS\ClassName
$obj = new $a; // NS\ClassName::__construct
$b = 'NS\funcName'; // можно \NS\funcName
$b(); // NS\funcName
echo constant('NS\CONST_NAME'); // NS\NS
"\\namespacename\\classname"
namespace Foo;
class Bar { /*...*/ }
use My\Full\Classname as Bar;
use My\Full\NSname; // My\Full\NSname as NSname
use \ArrayObject; // импорт глобального класса
$obj = new Bar; // объект класса My\Full\Classname
$obj = new namespace\Bar; // объект класса Foo\Bar
NSname\subns\func(); // функция My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // глобальный ArrayObject
use My\Full\Classname as Another, My\Full\NSname;
$obj = new Another;
//объект класса My\Full\Classname
NSname\subns\func();
//функция My\Full\NSname\subns\func
