PHP命名空间和自动加载初探,php命名空间初探_PHP教程
PHP命名空间和自动加载初探,php命名空间初探
参考资料: PHP手册-语言参考:http://php.net/manual/zh/language.namespaces.php 概要: 1. 声明了命名空间之后,下面的const, function, class都会划归到该命名空间。 2. 只有声明过命名空间的PHP 文件才能加载有命名空间的PHP文件。 3. PHP 5.3 及以上才能使用命名空间 名词: 关键字:namespace 用来声明 本PHP文件的命名空间 常量:__NAMESPACE__ 用来返回当前命名空间的名称 默认为空字符串操作符: use 默认以最后一个\后的字符串为别名,配合 as 则为 as后的字符串,与MySQL的字段别名一致。 实际操作如下: 在apache目录下建立如下文件:index.php,Order.php,User.php

<span> 1</span> <?<span>php </span><span> 2</span> <span>/*</span><span>* </span><span> 3</span> <span> * @Author: Martin </span><span> 4</span> <span> * @Support: Martin </span><span> 5</span> <span> * @Last Modified by: Martin </span><span> 6</span> <span>*/</span> <span> 7</span> <span>namespace Order; </span><span> 8</span> <span> 9</span> <span>const</span> STR = 'order list<br />'<span>; </span><span>10</span> <span>11</span> <span>function</span><span> detail() </span><span>12</span> <span>{ </span><span>13</span> <span>return</span> 'order detail<br />'<span>; </span><span>14</span> <span>} </span><span>15</span> <span>function</span><span> call_by_self() </span><span>16</span> <span>{ </span><span>17</span> <span>return</span> 'call by self<br />'<span>; </span><span>18</span> <span>} </span><span>19</span> <span>/*</span><span>* </span><span>20</span> <span> * </span><span>21</span> <span>*/</span> <span>22</span> <span>class</span><span> Orderlist </span><span>23</span> <span>{ </span><span>24</span> <span>25</span> <span>public</span> <span>function</span><span> __construct() </span><span>26</span> <span> { </span><span>27</span> <span>echo</span> 'Class NameSpace is "', __NAMESPACE__, '"'<span>; </span><span>28</span> <span> } </span><span>29</span> <span>public</span> <span>function</span><span> show_list() </span><span>30</span> <span> { </span><span>31</span> <span>for</span> (<span>$i</span> = 0; <span>$i</span> < 5; <span>$i</span>++<span>) { </span><span>32</span> <span>echo</span> "<ul><li>this is order<span>$i</span><br />"<span>; </span><span>33</span> <span>//</span><span>内部直接访问</span> <span>34</span> <span>echo</span><span> detail(); </span><span>35</span> <span>echo</span> "</li></ul>"<span>; </span><span>36</span> <span> } </span><span>37</span> <span> } </span><span>38</span> <span>} </span><span>39</span> <span>//</span><span>内部通过命名空间访问</span> <span>40</span> <span>echo</span> \Order\call_by_self();
index.php 内容为:
<span> 1</span> <?<span>php </span><span> 2</span> <span>/*</span><span>* </span><span> 3</span> <span> * @Author: Martin </span><span> 4</span> <span> * @Support: Martin </span><span> 5</span> <span> * @Last Modified by: Martin </span><span> 6</span> <span>*/</span> <span> 7</span> <span>namespace index; </span><span> 8</span> <span>include_once</span>('Order.php'<span>); </span><span> 9</span> <span>10</span> <span>//</span><span>外部访问class 实例化即可使用</span> <span>11</span> <span>use</span><span> Order\Orderlist; </span><span>12</span> <span>$orderlist</span> = <span>new</span><span> orderlist; </span><span>13</span> <span>$orderlist</span>-><span>show_list(); </span><span>14</span> <span>15</span> <span>//</span><span>外部访问静态变量和function 直接访问</span> <span>16</span> <span>use</span><span> Order; </span><span>17</span> <span>echo</span><span> Order\STR; </span><span>18</span> <span>echo</span> Order\detail();
打印结果为:
User.php 内容为:
<span>1</span> <span>namespace User; </span><span>2</span> <span>//</span><span>直接载入Order</span> <span>3</span> <span>#</span><span>include('Order.php'); </span><span>4</span> <span>//自动载入</span> <span>5</span> spl_autoload_register(<span>function</span>(<span>$className</span><span>) { </span><span>6</span> <span>var_dump</span>(<span>$className</span><span>); </span><span>7</span> <span>}); </span><span>8</span> spl_autoload_call('Order');
打印结果为:
SPL自动载入函数包含如下:
spl_autoload_extensions: 注册并返回spl_autoload函数使用的默认文件扩展名。get_include_path: 设置默认引用的文件夹
spl_autoload_register: 自动引入文件
实际操作如下: 我们重新调整目录结构和并复制order 到 lib下面 如下:
修改User.php 如下:
<span> 1</span> <span>namespace User; </span><span> 2</span> <span> 3</span> <span>//</span><span>直接载入Order</span> <span> 4</span> <span>#</span><span>include('Order.php'); </span><span> 5</span> <span>//自动载入</span> <span> 6</span> <span>define</span>('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' .<span> DIRECTORY_SEPARATOR); </span><span> 7</span> spl_autoload_register(<span>function</span> (<span>$class</span><span>) { </span><span> 8</span> <span>$path</span> = LIB_DIR . <span>$class</span> . '.lib.php'<span>; </span><span> 9</span> <span>include</span> (<span>$path</span><span>); </span><span>10</span> <span>}); </span><span>11</span> <span>12</span> spl_autoload_call('Order'<span>); </span><span>13</span> <span>use</span><span> Order; </span><span>14</span> <span>15</span> <span>$orderList</span> = <span>new</span><span> \Order\Orderlist(); </span><span>16</span> <span>$orderList</span>->show_list();
打印结果为:
注意: 当采用SPL载入文件时,use并不能触发spl_autoload_register函数,他会被new触发,这样就会提示找不到文件, 所有采用spl_autoload_call 来提前触发自动载入。 本文地址:http://www.cnblogs.com/martin-tan/p/4864539.html 问题: 使用get_include_path,spl_autoload_extensions并且spl_autoload_register默认为空的情况下并不能直接载入目录下的文件,原因如上。(?)

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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

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

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

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

Contoh ciri baharu dalam PHP8: Bagaimana untuk menggunakan ruang nama dan kod untuk menyusun struktur kod dengan lebih baik? Pengenalan: PHP8 ialah versi penting bahasa pengaturcaraan PHP, yang memperkenalkan banyak ciri dan penambahbaikan baharu yang menarik. Salah satu ciri baharu yang paling penting ialah ruang nama. Ruang nama ialah cara untuk menyusun kod anda ke dalam struktur yang lebih baik yang mengelakkan konflik antara kelas, fungsi dan pemalar dengan nama yang sama. Dalam artikel ini, kita akan melihat cara memanfaatkan ruang nama dan kod untuk menstrukturkan kod PHP8 anda dengan lebih baik

Cara menyelesaikan ralat ruang nama PHP dan menjana mesej ralat yang sepadan PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas untuk membangunkan aplikasi web. Dalam PHP, ruang nama ialah mekanisme untuk mengurus dan mengatur kod, yang boleh mengelakkan konflik penamaan dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Walau bagaimanapun, disebabkan kerumitan definisi dan penggunaan ruang nama, ralat kadangkala berlaku. Artikel ini akan memperkenalkan beberapa kaedah untuk menyelesaikan ralat ruang nama PHP dan menjana gesaan ralat yang sepadan. 1. Namakan ruang

Ruang nama: Syurga Modulariti Dalam pembangunan perisian, kebolehselenggaraan adalah faktor penting. Memandangkan pangkalan kod anda terus berkembang, menyusun dan merangkum kod anda adalah penting untuk mengurus kerumitan. Ruang nama dalam PHP direka untuk tujuan ini. Konsep Ruang Nama Ruang nama ialah koleksi pengecam yang berkaitan secara logik. Ia menyediakan mekanisme untuk mengatur kelas, fungsi, dan pemalar ke dalam domain tertentu. Ruang nama menghapuskan konflik nama dengan memberikan setiap entiti nama yang unik, menghalang kelas atau fungsi yang berbeza daripada mempunyai nama yang sama. Sintaks ruang nama adalah dalam PHP Ruang nama ditakrifkan menggunakan garis miring ke belakang (): namespaceMyProjectDatabase membuat fail bernama "MyProject

Ciri baharu dalam PHP 5.4: Cara menggunakan alias ruang nama untuk memudahkan panggilan nama kelas Fungsi ruang nama yang diperkenalkan dalam PHP 5.3 memberikan kami cara yang lebih baik untuk mengatur dan mengurus kod. Dengan mengatur kelas, fungsi dan pemalar yang berkaitan ke dalam ruang nama, konflik penamaan antara modul yang berbeza boleh dielakkan dengan berkesan. Dalam versi PHP5.4, fungsi alias ruang nama (namespacealias) telah diperkenalkan, yang memudahkan lagi panggilan dan
