Php 在另一个命名空间类中实例化命名空间类

Php 在另一个命名空间类中实例化命名空间类,php,namespaces,Php,Namespaces,我不知道这个问题的标题是否正确,但我在从命名空间类创建对象时遇到了一个疑问 因此,这个项目的根目录中有一个index.php和一个Inc文件夹。inc文件夹有folders-Base(带 php)、页面(带有Admin.php)和Init.php 自动加载Inc文件夹(名称空间为Inc)并调用 在Init类中注册_services() 以下是index.php文件: <?php if ( file_exists( dirname( __FILE__ ) . '/vendor/autoloa

我不知道这个问题的标题是否正确,但我在从命名空间类创建对象时遇到了一个疑问

因此,这个项目的根目录中有一个index.php和一个Inc文件夹。inc文件夹有folders-Base(带 php)、页面(带有Admin.php)和Init.php 自动加载Inc文件夹(名称空间为Inc)并调用 在Init类中注册_services()

以下是index.php文件:

<?php
if ( file_exists( dirname( __FILE__ ) . '/vendor/autoload.php' ) ) {
    require_once dirname( __FILE__ ) . '/vendor/autoload.php';
    if ( class_exists( 'Inc\\Init' ) ) {
    Inc\Init::register_services();
        }
}
这将以数组形式返回Inc\Pages类的两个限定名 \管理员和Inc\Base\Enqueue。稍后,我们在 初始化类:

private static function instantiate( $class )
    {
        echo $class;
                $service = new $class();
        return $service;
    }
我的问题是,因为我们已经在Init类的名称空间Inc中,所以不会通过再次从Inc开始调用它来实例化该类(即Inc) \Pages\Admin或Inc\Base\Enqueue)引导它在名称空间“Inc\Inc\Pages\Admin”或“Inc\Inc\Pages\Enqueue”中搜索类?但我的代码工作正常。如果我对名称空间工作方式的理解不正确,或者我丢失了

文本,则根据当前名称空间解析,字符串始终假定/预期/要求为完全限定名

这是您的文字:

namespace Inc;

Pages\Admin::class
此文本
Pages\Admin
根据当前命名空间解析,并解析为
Inc\Pages\Admin
。因此
Pages\Admin::class
的值是
'Inc\Pages\Admin'
。然后将此字符串传递给其他人,并最终执行以下操作:

new $class()  // where $class = 'Inc\Pages\Admin'
由于您是从字符串实例化的,因此该字符串将被视为完全限定名,并且不会根据当前名称空间解析。正是因为字符串可以在名称空间之间传递,所以不可能清楚地知道它们应该属于哪个名称空间

public static function get_services() 
    {
        return [
            Pages\Admin::class,  
            Base\Enqueue::class
        ];
    }
private static function instantiate( $class )
    {
        echo $class;
                $service = new $class();
        return $service;
    }
namespace Inc;

Pages\Admin::class
new $class()  // where $class = 'Inc\Pages\Admin'