作者JohnRoyer (Zero 日落)
看板PHP
标题Re: [请益] 关於autoload
时间Fri Jan 26 22:51:03 2018
: 想请问使用autoload把所有的class都自动加载进来,使用上非常方便,
: 但是这样如果我这支程式只会使用到某一个class,但是实际上是全部都加载了。
我是没听过 autoload 有一次把所有 class 全部载入的功能
反倒是用到的时候才载入
假设我有个 library 放在 lib/Hello.php
内容如下:
<?php
echo 'class loaded'; // 档案一被载入就会印出字串
class Hello {}
然後我们先用 require 的方式来载入 library 看看会怎样
<?php
require __DIR__ . '/lib/Hello.php'; // 显示 'class loaded'
// 做点别的事
$a = 1 + 2 + 3;
$o = new Hello();
在 require 那一行就会看到 Hello.php 已经被读取并执行到 echo 那行
再来改用 spl_autoload_register() 来实作 autoload 规则:
<?php
spl_autoload_register(function($className) {
require __DIR__ . '/lib/' . $className . '.php';
});
// 在 new Hello() 之前作点别的事
$a = 1 + 2 + 3;
$o = new Hello(); // 显示 'class loaded'
如果使用 autoload 的话
PHP 不会一次把所有的档案都载入
而是在需要使用的时候去检查档案是否已经载入
没有的话再去载入
也就是为什麽第二个范例使用 autoload 的时候
会在 new 那行才看到 'class loaded'
不知道是不是你要的答案
希望有帮上忙
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.151.21
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1516978268.A.361.html
1F:→ wuwt4y: 这样说是没错,只是想说php自己一定会先扫过,他才知道有 01/27 00:03
2F:→ wuwt4y: 哪些东西 01/27 00:03
3F:→ JohnRoyer: PHP 会扫,不过是按照指定的方式找档案 01/27 09:18
4F:→ JohnRoyer: 像是档案存放路径规范是 PSR-4 01/27 09:19
5F:→ JohnRoyer: 但我上面的范例没有按照 PSR-4,而是把 class 档都放在 01/27 09:19
6F:→ JohnRoyer: lib/ 目录下面 01/27 09:19
7F:→ wuwt4y: 了解了,另外请问有工具可以直接看到我的namespace的结构 01/27 12:46
8F:→ wuwt4y: 吗 01/27 12:46