Heim > Fragen und Antworten > Hauptteil
Verwenden Sie namespace
和use
的时候有些疑惑
在框架中随便use
某个带有namespace
(命名空间
)的文件,直接new
, um das Objekt zu instanziieren und abzurufen
Als ich jedoch lokal einen Verzeichnistest durchführte, stellte ich fest, dass ich beim Aufrufen einer Datei mit einem namespace
die Methode use
nicht direkt zum Referenzieren und Instanziieren verwenden kann namespace
文件的时候
不能直接采用use
的方式引用,进行实例化
而是先要require
Und es muss zuerst require
sein
, bevor es normal instanziiert werden kann
Als ich das Framework jedoch überprüfte, stellte ich fest, dass es anscheinend nicht vorher instanziiert worden war requrie
要实例化的文件,但是use
之后就直接可以new
Verzeichnisstruktur
library
-->core.php
test.php
core.php
<?php
namespace library;
class core
{
}
test.php
<?php
require_once 'library/core.php'; // 必须要require
// 第一种实例化
// use \library\core;
// $obj = new core();
// 第二种实例化
$obj = new \library\corecore();
var_dump($obj);
Anbei sind einige Screenshots der Verwendung im Framework
想不通...搞不懂...
Ich muss morgens keine Medikamente eingenommen haben, eh! Fazit~
Fügen Sie etwas gesunden Menschenverstand zum Laden von Kursen hinzuspl_autoload_register($callback);
/**
* 自动加载类库
* @param string $strClass 方法名
*/
static public function load($strClass)
{
$strClassPath = CHARM . '\' .$strClass . APPEXT;
if(in_array($strClass, self::$arrClassMap)) {
return TRUE;
}else {
if(is_file($strClassPath)) {
require_once $strClassPath;
self::$arrClassMap[$strClass] = $strClass;
}else {
throw new \Exception("找不到类库 -- " . $strCtrlFile);
}
}
}
怪我咯2017-06-24 09:44:35
框架使用了自动加载机制
实现原理
spl_autoload_register($callable);
或
__autoload($callable);
这个函数注册了一个函数,在当前文件找不到对应的类时将自动调用,
执行其回调函数,将new的类include进来
为情所困2017-06-24 09:44:35
楼主用的是CI框架吧 框架已经帮你spl_autoload_register($callable);过了 通俗的说,你use哪个类,它就帮你require_once哪个类
具体代码实现可以看看CI的这个 Loader类
https://github.com/bcit-ci/Co...