Rumah pembangunan bahagian belakang tutorial php PHP中命名空间这部分内容的详解

PHP中命名空间这部分内容的详解

Aug 03, 2018 pm 02:45 PM
ruang nama angkasa lepas

这篇文章给大家介绍的内容是关于PHP中命名空间这部分内容的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。

为什么php中要使用namespace?

假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的。因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件。所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Student或者project2_school_class_Student。

引入namespace之后就可以将这个有效规避了,一个namespace就相当于对应一个文件路径,查找这个类的时候,就会去对应的文件路径查找类定义文件了。

namespace的定义和使用

定义:

<code class="php"><?php<br/><br/>namespace Myproject;</code>
Salin selepas log masuk

或者

<code class="php"><?php<br/><br/>namespace Myproject {<br/><br/>}</code>
Salin selepas log masuk

使用:

<code class="php"><?php<br/><br/>use Myproject/School;</code>
Salin selepas log masuk
<code class="php"><?php<br/><br/>use Myproject/School as School1;   // 别名</code>
Salin selepas log masuk

命名空间是运行时解析的。use就相当于一种声明,并不解析和加载。比如下面这个例子:

test.php

<code class="php"><?php<br/>use my\name;<br/>require_once("/home/yejianfeng/handcode/test/namespace1.php");<br/>$a = new my\name\A();<br/>$a->Print1();</code>
Salin selepas log masuk

namespace1.php

<code class="php"><?php<br/>namespace my\name;<br/>class A {<br/>        public function Print1(){<br/>                echo 11;<br/>        }<br/>}</code>
Salin selepas log masuk

虽然require_once在use下面,也是可以正常运行的,因为程序只有在new my\name\A()的时候才去加载命名空间my\name

全局类和命名空间类

如果要new一个全局类使用 new \A()

如果要new一个命名空间类,使用new my\namespace\A()

命名空间的顺序

自从有了命名空间之后,最容易出错的该是使用类的时候,这个类的寻找路径是什么样的了。

如果能弄清楚manual中的这个例子就能全部弄清楚寻找顺序了。

<code class="php"><?php<br/>namespace A;<br/>use B\D, C\E as F;<br/><br/>// 函数调用<br/><br/>foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()<br/>            // 再尝试调用全局函数 "foo"<br/><br/>\foo();     // 调用全局空间函数 "foo" <br/><br/>my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" <br/><br/>F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" <br/>            // 再尝试调用全局函数 "F"<br/><br/>// 类引用<br/><br/>new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "A\B"<br/><br/>new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "B\D"<br/><br/>new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象<br/>            // 如果未找到,则尝试自动装载类 "C\E"<br/><br/>new \B();   // 创建定义在全局空间中的类 "B" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "B"<br/><br/>new \D();   // 创建定义在全局空间中的类 "D" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "D"<br/><br/>new \F();   // 创建定义在全局空间中的类 "F" 的一个对象<br/>            // 如果未发现,则尝试自动装载类 "F"<br/><br/>// 调用另一个命名空间中的静态方法或命名空间函数<br/><br/>B\foo();    // 调用命名空间 "A\B" 中函数 "foo"<br/><br/>B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法<br/>            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"<br/><br/>D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法<br/>            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"<br/><br/>\B\foo();   // 调用命名空间 "B" 中的函数 "foo" <br/><br/>\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法<br/>            // 如果类 "B" 未找到,则尝试自动装载类 "B"<br/><br/>// 当前命名空间中的静态方法或函数<br/><br/>A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法<br/>              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"<br/><br/>\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法<br/>              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"<br/>?></code>
Salin selepas log masuk

相关文章推荐:

php变量的命名规则以及php变量的用法(附代码)

php如何利用32进制实现对id的加密解密(附代码)

Atas ialah kandungan terperinci PHP中命名空间这部分内容的详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jarak berangka berdasarkan pembelajaran mesin: jarak antara titik dalam ruang Jarak berangka berdasarkan pembelajaran mesin: jarak antara titik dalam ruang Apr 11, 2023 pm 11:40 PM

Artikel ini dicetak semula daripada akaun awam WeChat "Hidup dalam Era Maklumat" Penulis hidup dalam era maklumat. Untuk mencetak semula artikel ini, sila hubungi akaun awam Living in the Information Age. Dalam pembelajaran mesin, konsep asas ialah cara menilai perbezaan antara dua sampel, supaya persamaan dan maklumat kategori antara kedua-dua sampel dapat dinilai. Ukuran untuk menilai persamaan ini ialah jarak antara dua sampel dalam ruang ciri. Terdapat banyak kaedah pengukuran berdasarkan ciri data yang berbeza. Secara umumnya, untuk dua sampel data x, y, takrifkan fungsi d(x, y) Jika ia ditakrifkan sebagai jarak antara dua sampel, maka d(x, y) perlu memenuhi sifat asas berikut : Bukan-). negatif: d(x, y)&gt;=0 Identiti: d(x, y)=0 ⇔ x=y pasangan

Bagaimana untuk menambah ruang swap pada Ubuntu 22.04 LTS Bagaimana untuk menambah ruang swap pada Ubuntu 22.04 LTS Feb 20, 2024 am 11:12 AM

Ruang swap memainkan peranan penting dalam sistem Linux, terutamanya apabila sistem kekurangan ingatan. Ia bertindak sebagai ruang storan memori sandaran yang membantu sistem berjalan dengan lancar dan mengekalkan kestabilan walaupun di bawah beban yang tinggi. Artikel ini memberi anda panduan terperinci untuk menambah ruang swap pada Ubuntu 22.04LTS untuk memastikan prestasi sistem anda dioptimumkan dan boleh mengendalikan pelbagai beban kerja. Memahami Ruang Swap Space Swap menyediakan memori maya yang digunakan untuk menambah RAM fizikal sistem. Apabila sistem kekurangan RAM, kernel menukar data ke cakera untuk mengelakkan kehabisan memori dan sistem ranap. Sistem Linux biasanya menggunakan ruang swap untuk mengendalikan situasi ini. Jalankan berbilang aplikasi intensif memori secara serentak untuk memproses fail atau data yang sangat besar

Selesaikan ralat PHP: Kelas ruang nama yang ditentukan tidak ditemui Selesaikan ralat PHP: Kelas ruang nama yang ditentukan tidak ditemui Aug 18, 2023 pm 11:28 PM

Selesaikan ralat PHP: Kelas ruang nama yang ditentukan tidak ditemui Semasa membangunkan menggunakan PHP, kami sering menghadapi pelbagai mesej ralat. Salah satu ralat biasa ialah "Kelas ruang nama yang ditentukan tidak dijumpai". Ralat ini biasanya disebabkan oleh fail kelas yang diimport tidak dirujuk dengan betul ruang nama. Artikel ini menerangkan cara menyelesaikan masalah ini dan menyediakan beberapa contoh kod. Mula-mula, mari kita lihat contoh mesej ralat biasa: Fatalerror:UncaughtError:C

Berapakah jumlah baki ruang yang sesuai pada pemacu c? Berapakah jumlah baki ruang yang sesuai pada pemacu c? Jun 27, 2023 pm 02:51 PM

50-80G baki ruang pada pemacu c adalah lebih sesuai. Memandangkan sistem akan menjana fail sampah, fail cache, dsb. pada masa hadapan, adalah disyorkan untuk menempah sekurang-kurangnya 50GB-80GB ruang untuk pemacu C jika anda tidak biasa memilih laluan semasa memasang perisian dan tidak membersihkannya; komputer anda dengan kerap, maka sekurang-kurangnya 100GB diperlukan .

Bagaimana untuk menggunakan ruang nama dalam rangka kerja F3? Bagaimana untuk menggunakan ruang nama dalam rangka kerja F3? Jun 03, 2023 am 08:02 AM

Rangka kerja F3 ialah rangka kerja PHPWeb yang ringkas, mudah digunakan, fleksibel dan boleh diperluaskan. Mekanisme ruang nama (Namespace)nya memberikan kita struktur kod yang lebih standard, lebih mudah dibaca dan lebih jelas. Dalam artikel ini, kami akan meneroka cara menggunakan ruang nama dalam rangka kerja F3. 1. Apakah ruang nama? Ruang nama sering digunakan untuk menyelesaikan masalah konflik penamaan dalam PHP Ia boleh merangkum satu atau lebih kelas, fungsi atau pemalar dalam ruang nama, yang bersamaan dengan menambah awalan kepada mereka. contoh

Pengenalan kepada ruang pemacu C yang diperlukan untuk menaik taraf win11 Pengenalan kepada ruang pemacu C yang diperlukan untuk menaik taraf win11 Dec 23, 2023 am 08:57 AM

Seperti yang kita sedia maklum, jika cakera sistem yang diduduki terlalu besar selepas pemasangan sistem selesai, ia boleh menyebabkan sistem ketinggalan, kelewatan dan juga kehilangan fail. Oleh itu, sebelum anda memasang sistem win11, anda perlu tahu berapa banyak ruang pemacu C yang diperlukan untuk menaik taraf win11 Mari kita lihat dengan editor. Berapa banyak ruang pemacu C diperlukan untuk menaik taraf win11: Jawapan: Menaik taraf win11 memerlukan 20-30GB ruang pemacu C. 1. Menurut keperluan konfigurasi win11 Microsoft, anda dapat melihat bahawa pemasangan win11 memerlukan ruang cakera keras 64GB. 2. Tetapi sebenarnya, secara umumnya, tidak memerlukan ruang yang begitu besar. 3. Mengikut maklum balas daripada pengguna yang telah memasang win11, peningkatan win11 memerlukan kira-kira 20-30GB ruang pemacu C. 4. Tetapi jika pintu kita hanya mempunyai

Reka bentuk idea dan kaedah pelaksanaan ruang nama Redis dan mekanisme tamat tempoh Reka bentuk idea dan kaedah pelaksanaan ruang nama Redis dan mekanisme tamat tempoh May 11, 2023 am 10:40 AM

Redis ialah pangkalan data storan nilai kunci berprestasi tinggi sumber terbuka. Apabila menggunakan Redis untuk penyimpanan data, kita perlu mempertimbangkan reka bentuk ruang nama utama dan mekanisme tamat tempoh untuk mengekalkan prestasi dan integriti data Redis. Artikel ini akan memperkenalkan idea reka bentuk dan kaedah pelaksanaan ruang nama dan mekanisme tamat tempoh Redis. 1. Idea reka bentuk ruang nama Redis Dalam Redis, kekunci boleh ditetapkan sewenang-wenangnya. Untuk memudahkan pengurusan dan perbezaan jenis data yang berbeza, Redis memperkenalkan konsep ruang nama. kehidupan

Ralat sintaks C++: ruang nama tidak ditentukan digunakan, bagaimana untuk menanganinya? Ralat sintaks C++: ruang nama tidak ditentukan digunakan, bagaimana untuk menanganinya? Aug 21, 2023 pm 09:49 PM

C++ ialah bahasa pengaturcaraan peringkat tinggi yang digunakan secara meluas Ia mempunyai fleksibiliti dan skalabiliti yang tinggi, tetapi ia juga memerlukan pembangun untuk menguasai peraturan tatabahasanya dengan ketat untuk mengelakkan ralat. Salah satu ralat biasa ialah "penggunaan ruang nama yang tidak ditentukan". Artikel ini menerangkan maksud ralat ini, sebab ia berlaku dan cara membetulkannya. 1. Apakah kegunaan ruang nama yang tidak ditentukan? Dalam C++, ruang nama ialah cara mengatur kod yang boleh diguna semula untuk memastikan ia modular dan boleh dibaca. Fungsi dengan nama yang sama boleh dibuat menggunakan ruang nama

See all articles