亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【php】命名空間 和 自動加載的關系

標簽:
PHP

目的

本文的目的主要是说明 命名空间的 use 关键词 和 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱的表现,这种想法也是很正常的,让我们来解密吧

命名空间(namespace)

php从5.3加入了命名空间,我略懂一些java,所以命名空间还是比较好理解的,为什么需要命名空间啦?主要解决自己写的内部类/函数/常量  和 第三方的类/函数/常量冲突

。引用命名空间下资源都要 使用关键字 use 标明 例如

1

2

3

require_once("apanly/BrowserDetector/Browser.php");

use apanly\BrowserDetector\Browser;

new Browser();

自动加载

php可以自定义自动加载函数,主要减少include 和 require 的使用。例如

1

2

3

4

5

6

7

8

9

10

function myLoader($classname){

   $class_file $classname '.php';

   if file_exists($class_file) ){

      require_once($class_file);

   }else{

      echo "[ autoload error ]".$class_file." not found";

      die(0);

   }

}

spl_autoload_register("myLoader");

疑问

是 use 的时候 会执行 myLoader 自动记载函数 还是 new 一个对象的时候会执行自动加载函数?

答案是: new 一个对象的时候 会执行自动加载函数

示例演示

use 测试

<?php

//根据class名字 找文件

function myLoader($classname){

   $class_file = $classname . '.php';

   if ( file_exists($class_file) ){

      require_once($class_file);

   }else{

      echo "[ autoload error ]".$class_file." not found";

      die(0);

   }

}

 

spl_autoload_register("myLoader");

 

use \apanly\test\test;

new test();


没有任何输出

new 测试

<?php

//根据class名字 找文件

function myLoader($classname){

   $class_file = $classname . '.php';

   if ( file_exists($class_file) ){

      require_once($class_file);

   }else{

      echo "[ autoload error ]".$class_file." not found";

      die(0);

   }

}

 

spl_autoload_register("myLoader");

 

use \apanly\test\test;


输出 :

1[ autoload error ]apanly\test\test.php not found

结论

use 只是标明该使用那个命名空间,new 对象才是真真执行自动加载的触发器。命名空间和自动加载没有半毛钱关系

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消