Re: [請益] 關於autoload

作者: JohnRoyer (Zero 日落)   2018-01-26 22:51:03
: 想請問使用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'
不知道是不是你要的答案
希望有幫上忙
作者: wuwt4y (Poky)   2018-01-27 00:03:00
這樣說是沒錯,只是想說php自己一定會先掃過,他才知道有哪些東西
作者: JohnRoyer (Zero 日落)   2018-01-27 09:18:00
PHP 會掃,不過是按照指定的方式找檔案像是檔案存放路徑規範是 PSR-4但我上面的範例沒有按照 PSR-4,而是把 class 檔都放在lib/ 目錄下面
作者: wuwt4y (Poky)   2018-01-27 12:46:00
了解了,另外請問有工具可以直接看到我的namespace的結構嗎

Links booklink

Contact Us: admin [ a t ] ucptt.com