PHP的“使用”关键字和自动加载
我的问题分为三个部分:
>使用use语句是否会立即触发自动加载器,还是等到使用该类? (延迟加载) 这是一个带有use语句的Laravel控制器的示例类定义: namespace AppHttpControllers; use CarbonCarbon; class FooController extends Controller { /** * This action uses the Carbon class */ public function bar1() { return view('foo.bar1',['now' => new Carbon()]); } /** * This action does not use the Carbon class */ public function bar2() { return view('foo.bar2'); } } 没有use语句的同一个类: namespace AppHttpControllers; class FooController extends Controller { /** * This action uses the Carbon class */ public function bar1() { return view('foo.bar1',['now' => new CarbonCarbon()]); } /** * This action does not use the Carbon class */ public function bar2() { return view('foo.bar2'); } } 解决方法
1)执行新的Class()语句时,类会自动加载.
2)见1) 3)最好遵循哪种模式以及为什么?: 我建议使用use,因为你可能会遇到一个很长的命名空间,你的代码将变得不可读的情况. 从php docs:
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> 命名空间只是组织类的附加功能. 编辑:正如@IMSoP在评论中指出的那样,新的并不是自动加载器被触发的唯一时间.访问class constant,static method或static property也会触发它,运行class_exists也是如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |