Rumah > Artikel > pembangunan bahagian belakang > Definisi ruang nama dan penggunaan dalam PHP (contoh terperinci)
Dalam artikel sebelum ini, saya membawakan anda "Bagaimana untuk mendapatkan warisan kelas PHP? (Perkongsian Ringkasan) ", yang memperkenalkan pengetahuan berkaitan tentang warisan dalam kelas PHP secara terperinci. Dalam artikel ini, kita akan terus melihat pengetahuan yang berkaitan tentang ruang nama PHP. Saya harap ia akan membantu semua orang!
Ruang nama sebenarnya merupakan konsep abstrak Contohnya, dalam kehidupan seharian kita, direktori dalam sistem pengendalian digunakan untuk mengumpulkan fail yang berkaitan memainkan peranan sebagai ruang nama.
Jadi apakah ruang nama? Malah, ruang nama boleh difahami sebagai kaedah merangkumkan sesuatu Kelas, fungsi dan pemalar dalam PHP tidak boleh mempunyai nama yang sama untuk mengelakkannya daripada mempunyai nama yang sama dan menyelesaikan masalah nama yang sama ketiga, ruang nama perlu digunakan.
Dalam PHP, ruang nama digunakan terutamanya untuk menyelesaikan konflik penamaan antara kod yang ditulis pengguna dan kelas, fungsi dan pemalar dalaman atau pihak ketiga Apabila terdapat terlalu banyak fail, kemungkinan pendua sentiasa ada nama. ;Juga buat nama yang sangat pendek untuk nama pengecam yang panjang, yang akan meningkatkan kebolehbacaan kod.
Jadi bagaimana ruang nama diisytiharkan, iaitu, ditakrifkan dan digunakan? Seterusnya, mari kita lihat bagaimana untuk menentukan ruang nama!
Tentukan ruang nama
Sebarang kod yang betul dalam PHP boleh disertakan dalam ruang nama, tetapi hanya kelas, fungsi, pemalar, dsb. Hanya kod jenis akan dipengaruhi oleh ruang nama.
Kami menggunakan kata kunci namespace
untuk melengkapkan definisi ruang nama Format sintaksnya adalah seperti berikut:
namespace 命名空间名;
Contohnya adalah seperti berikut:
<.>
<?php // 定义代码在 'named' 命名空间中 namespace named; //在这里可以不使用大括号 // ... 代码 ... ?>
mentakrifkan dua ruang nama:
<?php namespace MyProject { //这里建议大家使用大括号,这里定义了一个名为MyProject的命名空间 const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace Another { //这里定义了一个名为Another的命名空间 const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?>
definer Namespace
namespace App\Model; namespace App\Controller\Home;Contohnya adalah seperti berikut:
<?php namespace MyProject\Sub\Level; //声明分层次的单个命名空间 const CONNECT_OK = 1; class Connection { /* ... */ } function Connect() { /* ... */ } ?>
Kami mempunyai dua format sintaks untuk mentakrifkan berbilang ruang nama dalam satu fail Contohnya adalah seperti berikut:
<.>
<?php namespace named; const CONNECT_OK = 1; class className { /* ... */ } namespace names; const CONNECT_OK = 1; class className { /* ... */ } ?>Melalui pengenalan di atas, kami sudah tahu bagaimana untuk menentukan ruang nama tidak mencukupi dalam PHP adalah lebih penting, kemudian mari kita lihat cara menggunakan ruang nama.
<?php namespace named{ const CONNECT_OK = 1; class className { /* ... */ } } namespace names{ const CONNECT_OK = 1; class className { /* ... */ } } ?>Menggunakan ruang nama
Sebelum memahami cara menggunakan ruang nama, kita harus memahami cara menggunakan ruang nama dalam PHP Untuk mengetahui elemen mana dalam ruang nama untuk digunakan, maka kita perlu mengetahui prinsip akses elemen ruang nama dalam PHP. Pertama sekali, kami tidak tahu banyak tentang PHP, tetapi kami boleh meringkaskan tiga cara untuk mengakses fail dalam sistem fail:
Nama fail relatif, nama laluan relatif dan nama laluan mutlak.
Elemen ruang nama PHP hanya menggunakan prinsip yang sama Contohnya, nama kelas di bawah ruang nama boleh diperkenalkan dalam tiga cara:
Nama tidak layak.
, atau nama kelas tanpa awalan, seperti, maka ujian akan dihuraikan sebagai . Jika kod ujian adalah global dan tidak mengandungi sebarang kod dalam ruang nama, maka ujian akan dihuraikan sebagai ujian. $a = new test()
test
currentnamespace
currentnamespacetest
Nama yang layak
, Jika kod ujian adalah global dan tidak mengandungi kod dalam mana-mana ruang nama, maka ujian akan dihuraikan sebagai . $a = new subnamespacetest()
currentnamespace
currentnamespacesubnamespacetest
subnamespacefoo
Nama yang layak sepenuhnya
$a = new currentnamespacetest()
Berikut adalah contoh penggunaan ketiga-tiga kaedah ini Kami memerlukan dua fail sumber PHP, iaitu currentnamespacetest
dan
demo.php
Dalam contoh di atas, kita perlu ambil perhatian bahawa untuk mengakses mana-mana kelas global, fungsi atau pemalar, anda boleh menggunakan nama yang layak sepenuhnya, seperti index.php
atau
<?php namespace Test\Bar\Demo; const FOO = 1; function foo() {} class foo { public function demo() { echo '命名空间为:Test\Bar\Demo'; } } ?>
别名、导入
PHP 允许通过别名引用或导入的方式来使用外部的命名空间,这是命名空间的一个重要特征。
在PHP中,通过use
关键字和as
配合可以实现命名空间的导入和设置别名。它的语法格式如下:
use 命名空间 as 别名;
示例如下:
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use ArrayObject; // 导入一个函数 use function My\Full\functionName; // 导入一个函数并定义别名 use function My\Full\functionName as func; // 导入一个常量 use const My\Full\CONSTANT; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用 My\Full\NSname\subns\func 函数 $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 func(); // 调用 My\Full\functionName 函数 echo CONSTANT; // 打印 My\Full\CONSTANT 常量 ?>
其中需要注意的是,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
Atas ialah kandungan terperinci Definisi ruang nama dan penggunaan dalam PHP (contoh terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!