gpt4 book ai didi

php - 从别名命名空间中的字符串名称创建新的类实例

转载 作者:行者123 更新时间:2023-12-04 16:55:58 26 4
gpt4 key购买 nike

我见过类似 this 的问题和 this ,但是如果您已经有一个命名空间并且该类位于别名命名空间中,则两者都没有说明如何从字符串名称创建类实例:

<?php
namespace my\project;

require 'vendor/autoload.php';

//Example aliased classes, more may be defined elsewhere
use League\OAuth2\Client\Provider\Google;
use Stevenmaguire\OAuth2\Client\Provider\Microsoft;

//This is mapped from a submitted form value
$provider = 'Google';

$g = new $provider;

这会抛出 PHP Fatal error: Class 'Google' not found .在这些问题中,它说你应该以 __NAMESPACE__ 为前缀。 ,但问题是这些类不在 my\project 中命名空间,所以这也不起作用,因为它导致类名 my\project\Google这是不存在的。

这个特定代码的一个愚蠢的解决方法是使用一个数组来存储所有的命名空间和类名,但如果我事先不知道所有可能的类名,这将无法工作。

我什至看不到如何使用反射来解决这个问题,因为出于同样的原因,我无法为别名类创建反射对象 - new \ReflectionClass($provider);抛出同样的错误。

如何动态获取别名类名的命名空间?

最佳答案

您只需使用:

$provider = 'League\OAuth2\Client\Provider\Google';

没有其他解决办法,类名变量需要包含全限定类名;别名不适用于字符串类名,内省(introspection)也无济于事。

关于php - 从别名命名空间中的字符串名称创建新的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36432073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com