Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Definisi ruang nama dan penggunaan dalam PHP (contoh terperinci)

Definisi ruang nama dan penggunaan dalam PHP (contoh terperinci)

WBOY
WBOYasal
2021-10-25 15:29:164376semak imbas

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!

Definisi ruang nama dan penggunaan dalam PHP (contoh terperinci)

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  
// 定义代码在 &#39;named&#39; 命名空间中  
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

Hubungan antara ruang nama dalam PHP sangat serupa dengan direktori dan fail, membolehkan anda menentukan nama ruang nama hierarki. Oleh itu, nama ruang nama boleh ditakrifkan secara hierarki Format sintaksnya adalah seperti berikut:


namespace App\Model;
namespace App\Controller\Home;
Contohnya adalah seperti berikut:


<.>Dalam contoh di atas, MyProjectSubLevelCONNECT_OK pemalar, kelas MyProjectSubLevelConnection dan fungsi MyProjectSubLevelConnect
<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }
?>

  • dicipta dalam fail yang sama untuk mentakrifkan berbilang ruang nama


    Kami mempunyai dua format sintaks untuk mentakrifkan berbilang ruang nama dalam satu fail Contohnya adalah seperti berikut:

Yang pertama ialah gabungan sintaks ringkas

<.>

Kemudian ada pendakap {}


<?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
    atau
  • Jika ruang nama semasa ialah

    , 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()testcurrentnamespacecurrentnamespacetestNama yang layak

    , atau mengandungi nama awalan, seperti
  • , jika ruang nama semasa ialah
  • , ujian akan dihuraikan sebagai

    , Jika kod ujian adalah global dan tidak mengandungi kod dalam mana-mana ruang nama, maka ujian akan dihuraikan sebagai . $a = new subnamespacetest()currentnamespacecurrentnamespacesubnamespacetestsubnamespacefooNama yang layak sepenuhnya

    , atau nama yang termasuk operator awalan global, seperti
  • , dalam kes ini ujian sentiasa dihuraikan ke dalam kod Teks nama
  • .

    $a = new currentnamespacetest()Berikut adalah contoh penggunaan ketiga-tiga kaedah ini Kami memerlukan dua fail sumber PHP, iaitu currentnamespacetest dan

    Kod sampel adalah seperti berikut:

demo.phpDalam 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

, dsb.
<?php
    namespace Test\Bar\Demo;
    const FOO = 1;
    function foo() {}
    class foo
    {
        public function demo() {
            echo &#39;命名空间为:Test\Bar\Demo&#39;;
        }
    }
?>

别名、导入

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn