PHP.mk документација

Клучниот збор namespace и __NAMESPACE__

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

language.namespaces.nsconstants.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека language.namespaces.nsconstants.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Клучниот збор namespace и __NAMESPACE__

Референца за `language.namespaces.nsconstants.php` со подобрена типографија и навигација.

language.namespaces.nsconstants.php

Клучниот збор namespace и магичната константа __NAMESPACE__

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

PHP поддржува два начина за апстрактно пристапување до елементи во тековниот простор на имиња, __NAMESPACE__ магичната константа, и namespace keyword.

Вредноста на __NAMESPACE__ е стринг што го содржи името на тековниот простор на имиња. Во глобален код без простор на имиња, содржи празен стринг.

Пример #1 Пример на __NAMESPACE__, код со простор на имиња

<?php
namespace MyProject;

echo
'"', __NAMESPACE__, '"'; // outputs "MyProject"
?>

Пример #2 Пример на __NAMESPACE__, глобален код

<?php

echo '"', __NAMESPACE__, '"'; // outputs ""
?>
На __NAMESPACE__ константата е корисна за динамично конструирање имиња, на пример:

Пример #3 Користење на __NAMESPACE__ за динамична конструкција на имиња

<?php
namespace MyProject;

function
get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new
$a;
}
?>

На namespace клучниот збор може да се користи за експлицитно барање елемент од тековниот простор на имиња или подпростор на имиња. Тоа е еквивалент на просторот на имиња на self операторот за класи.

Пример #4 Операторот за простор на имиња, внатре во простор на имиња

<?php
namespace MyProject;

use
blah\blah as mine; // see "Using namespaces: Aliasing/Importing"

blah\mine(); // calls function MyProject\blah\mine()
namespace\blah\mine(); // calls function MyProject\blah\mine()

namespace\func(); // calls function MyProject\func()
namespace\sub\func(); // calls function MyProject\sub\func()
namespace\cname::method(); // calls static method "method" of class MyProject\cname
$a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname
$b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b
?>

Пример #5 Операторот за простор на имиња, во глобален код

<?php

namespace\func
(); // calls function func()
namespace\sub\func(); // calls function sub\func()
namespace\cname::method(); // calls static method "method" of class cname
$a = new namespace\sub\cname(); // instantiates object of class sub\cname
$b = namespace\CONSTANT; // assigns value of constant CONSTANT to $b
?>

Белешки од корисници 2 забелешки

a точка schaffhirt на sedna-soft точка de
пред 16 години
Just in case you wonder what the practical use of the namespace keyword is...

It can explicitly refer to classes from the current namespace regardless of possibly "use"d classes with the same name from other namespaces. However, this does not apply for functions.

Example:

<?php
namespace foo;
class Xyz {}
function abc () {}
?>

<?php
namespace bar;
class Xyz {}
function abc () {}
?>

<?php
namespace bar;
use foo\Xyz;
use foo\abc;
new Xyz(); // instantiates \foo\Xyz
new namespace\Xyz(); // instantiates \bar\Xyz
abc(); // invokes \bar\abc regardless of the second use statement
\foo\abc(); // it has to be invoked using the fully qualified name
?>

Hope, this can save someone from some trouble.

Best regards.
bharatthapa45 на gmail точка com
3 години пред
Difference between __NAMESPACE__ and keyword 'namespace' that I find relevant is when invoking a class:

<?php
namespace MyApp;

class App {
    static function app(){
        echo 'hello app';
    }
}

// this will work:
$obj = new namespace\App::app();

// this will not work
$obj = new __NAMESPACE__\App::app();

// however this will work:
$obj = __NAMESPACE__ . '\App';
$obj::foo();

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.