suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php – Verwirrung über Namespace und Verwendung

Verwenden Sie namespaceuse的时候有些疑惑
在框架中随便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的方式引用,进行实例化
而是先要requireUnd 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

Hängen Sie Ihre eigene lokale Testverzeichnisdatei an


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

想不通...搞不懂...

Danke euch allen für eure Antworten,

Ich muss morgens keine Medikamente eingenommen haben, eh! Fazit~

Fügen Sie etwas gesunden Menschenverstand zum Laden von Kursen hinzu
spl_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);
            }
        }
    }    
代言代言2819 Tage vor1035

Antworte allen(3)Ich werde antworten

  • 怪我咯

    怪我咯2017-06-24 09:44:35

    框架使用了自动加载机制
    
    实现原理
    spl_autoload_register($callable);
    或
    __autoload($callable);
    
    这个函数注册了一个函数,在当前文件找不到对应的类时将自动调用,
    执行其回调函数,将new的类include进来
    

    Antwort
    0
  • 某草草

    某草草2017-06-24 09:44:35

    注册自加载 https://github.com/TIGERB/eas...

    Antwort
    0
  • 为情所困

    为情所困2017-06-24 09:44:35

    楼主用的是CI框架吧 框架已经帮你spl_autoload_register($callable);过了 通俗的说,你use哪个类,它就帮你require_once哪个类
    具体代码实现可以看看CI的这个 Loader类 https://github.com/bcit-ci/Co...

    Antwort
    0
  • StornierenAntwort