namespace sözcüğü ve __NAMESPACE__ sabiti

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

PHP, geçerli isim alanı içindeki elemanlara mutlak olarak iki yolla erişimi destekler: sihirli __NAMESPACE__ sabiti ve namespace anahtar sözcüğü.

__NAMESPACE__ sabitinin değeri içinde bulunulan isim alanının adını içeren bir dizgedir. Küresel alandaki isim alansız kod için sabitin değeri boş dizgedir.

Örnek 1 - İsim alanlı kod, __NAMESPACE__ örneği

<?php
namespace Projem;

echo
'"', __NAMESPACE__, '"'; // "Projem" basar
?>

Örnek 2 - Küresel kod, __NAMESPACE__ örneği

<?php

echo '"', __NAMESPACE__, '"'; // "" basar
?>
__NAMESPACE__ sabiti dinamik olarak oluşturulan isimler için kullanışlıdır.

Örnek 3 - Dinamik isim oluşturmak için __NAMESPACE__ kullanımı

<?php
namespace Projem;

function
get($sınıfadı)
{
$a = __NAMESPACE__ . '\\' . $sınıfadı;
return new
$a;
}
?>

namespace sözcüğü, geçerli isim alanından veya bir alt isim alanından doğrudan doğruya bir eleman isteği yaparken kullanılabilir. Sınıflardaki self işlecinin isim alanlarındaki karşılığıdır.

Örnek 4 - Bir isim alanı içinde namespace işleci

<?php
namespace Projem;

use
fan\fin as fon; // bak: "İsim alanlarının kullanımı: İthal/Rumuz"

fin\fon(); // Projem\fin\fon() işlevini çağırır
namespace\fin\fon(); // Projem\fin\fon() işlevini çağırır

namespace\işlev(); // Projem\işlev() işlevini çağırır
namespace\alt\işlev(); // Projem\alt\işlev() işlevini çağırır
namespace\isim::yöntem(); // Projem\isim sınıfının statik "yöntem"
// yöntemini çağırır
$a = new namespace\alt\isim(); // Projem\alt\isim sınıfını örnekler
$b = namespace\SABİT; // Projem\SABİT sabitinin değerini $b'ye atar
?>

Örnek 5 - Küresel kod içinde namespace işleci

<?php

namespace\işlev
(); // işlev() işlevini çağırır
namespace\alt\işlev(); // alt\işlev() işlevini çağırır
namespace\isim::yöntem(); // isim sınıfının statik "yöntem" yöntemini çağırır
$a = new namespace\alt\isim(); // alt\isim sınıfını örnekler
$b = namespace\SABİT; // SABİT sabitinin değerini $b'ye atar
?>

add a note add a note

User Contributed Notes 3 notes

up
91
a dot schaffhirt at sedna-soft dot de
14 years ago
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.
up
1
bharatthapa45 at gmail dot com
2 years ago
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();

?>
up
-19
cornichonche at gmail dot com
6 years ago
The example 4 is wrong.
Using php 7.2

<?php
namespace monProjet;

use function
blah\blah as mine;

blah\mine(); // Will NOT work
mine(); // Will work
?>
To Top