为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用命名空间动态加载 PHP 类

如何使用命名空间动态加载 PHP 类

PHP
小怪兽爱吃肉 2023-04-02 15:11:01
这是我的静态代码 -$tireBrick = new DataObject\Objectbrick\Data\classname($object);我需要的是,我需要将“类名”更改为变量(动态加载类)`$tireBrick = new DataObject\Objectbrick\Data\$brickName($object);`  //But php doesn't allow to use this syntax.如您所见,它将动态分配“ $brickName($object)”谁能帮我动态加载这个类?谢谢塔兰加。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

用于::class获取完整的类名:


$myClass = classname::class; // DataObject\Objectbrick\Data\classname


$tireBrick = new $myClass($object);


查看完整回答
反对 回复 2023-04-02
?
慕森王

TA贡献1777条经验 获得超3个赞

$tireBrick = "new DataObject\\Objectbrick\\Data\\".$brickName($object);

或者尝试了解命名空间以缩短它


查看完整回答
反对 回复 2023-04-02
?
绝地无双

TA贡献1946条经验 获得超4个赞

我有一堆拼写检查类解决了这个问题。它看起来像这样:


$baseClass = 'SpellChecker';

$activeChecker = $activeChecker ? 'Hun' : Yii::$app->params['spellChecker']['active'];

$spellCheckerClass = "common\\models\\spellchecker\\$activeChecker$baseClass";

然后你可以像这样使用它:


/** @var SpellChecker $spellChecker */

$spellChecker = new $spellCheckerClass();

现在整个事情的本质是如果你使用类似的类是最好的,所以你可以使用这些函数而不用担心如果函数不存在它们会使应用程序崩溃。为此,您可以实现一个观察者模型,在其中定义要在观察者类中使用的每个函数,然后创建子类,在其中覆盖观察者类的功能。


查看完整回答
反对 回复 2023-04-02
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信