2016-12-14 111 views
0

所以主要是这是由我的代码结构造成的:PHP的需要()不能识别别名类

File1.php

use \Class1 as Blah; 
require 'File2.php'; 

File2.php

$closure = function ($arg) { 
    return new Blah($arg); 
}; 

不知背后的部分... as在使用require()后未被识别。

+0

如果您要求文件超出匿名函数的范围,那么您可以通过该环境中的开发人员访问该文件,以便您试图实现哪种功能? – KDOT

+0

@KDOT让我编辑这个,我已经发现,这不是一个与Slim本身有关的问题。我是由于使用“require()” – RegisteredUser

回答

4

命名空间别名是只在你写的use声明文件中的有效别名不会跨文件边界传输。如果您想要在File2.php中使用use Class1 as Blah,则需要将该语句放在File2.php的顶部。

+0

包含的代码无法识别“使用SomeClass作为\ Another”这一事实造成的,我不知道您如何轻松地措词...... +1 – KDOT

+0

谢谢!我刚刚发现了另一个问题,显然我不知道我究竟在寻找什么。如果我考虑一下,这样处理它就非常合理 – RegisteredUser

0

不是由代码认可 - 斯利姆是不是一个编译器,它是一个框架。

该代码将执行到PHP编译器标准,因此使用默认值。

use SomeNamespace\SomeClass as SomePrefix; 

将工作无论你想达到的目标。 require_once()方法会加载您的PHP文件来保存该类,因为您的目标是\目录,所以我假设它没有自定义名称空间。

如果你在一个班级内部工作,那么这可能是你的问题,在使用require_once()加载ParseMarkdownClass文件后,你的代码应该类似于这个。

use ParseMarkdownClass as Md; 

class SomeClass 
{ 
    public $container; 

    public function __construct() 
    { 
     $this->container = (object)['m' => function() { 
      return new Md(); 
     }]; 
    } 
} 

(new SomeClass())->$container->m()->...