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

别名在php中不存在的类名

别名在php中不存在的类名

PHP
UYOU 2022-07-29 12:32:07
考虑以下代码: use ReplacementClass; class A extends ReplacementClass { }此代码中的ReplacementClass名称应该只是一个占位符,一个未定义的、不存在的类。在运行时或运行之前,我想为这个不存在的类加上一个动态设置的现有类的别名,以使我的代码能够工作。PHP中有什么方法可以做到这一点吗?为什么我要实现这一点,是A在上面的示例中定义的,是项目插件中的一个类,我想使其可移植,所以ReplacementClass在原始插件中也是如此。我想为团队保留一个选项,以扩展这些类,并向它们添加新功能,这些仅在他们正在处理的特定项目中需要。在上述情况下,如果这两个都是真正的类,我可以用 扩展一个B类A,并在 中添加新功能B,我也可以ReplacementClassSpecific用扩展ReplacementClass并为其添加新功能,但是鉴于 PHP 的单继承,我不能不要同时扩展。
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您可以做到这一点的一种方法是使用 class_exists,如果它不存在,则添加一个虚拟占位符。


但理想情况下,我建议您研究 Laravel 使用的 Facades。通过这种方式,您可以灵活地实现,而无需依赖继承。


在线查看https://ideone.com/pWf8QU


/* // unhide this to see the two behaviours

  class ReplacementClass {

    public function foo() {

        return "foo";

    }

    public function bar() {

        return "bar";

    }

}*/

if(!class_exists('ReplacementClass')) {

   class MyReplacementClass {

     public function foo() {

        echo " foo does not exist, this is a placeholder";

     }

     public function bar() {

        echo " bar does not exist, this is a placeholder";

     }

   }

}

else {

   class MyReplacementClass extends ReplacementClass {

   }

}


class FooBar extends MyReplacementClass {


}


$x = new FooBar();

echo $x->foo() . $x->bar() . "\n";


查看完整回答
反对 回复 2022-07-29
?
青春有我

TA贡献1784条经验 获得超8个赞

您可以为此使用eval()。但这很脏。


eval("class $className extends $parentClassName {}");

例子


class Foo {}

$className = 'Bar';

$parentClassName = 'Foo';

eval("class $className extends $parentClassName {}");

$bar = new Bar();

var_dump($bar); // gives 'object(Bar)#1 (0) {}'

var_dump($bar instanceof Bar); // gives bool(true)

var_dump($bar instanceof Foo); // gives bool(true)

警告!使用 eval 效率低下并且可能非常危险。在考虑使用它之前,请先查阅文档。


最好重新考虑您的用例。从字面上看,我想不出什么需要完全动态的类名。如果此时您将库导入代码库,您应该知道预期的类名,此时您可以使用该名称的类扩展您的父类。


查看完整回答
反对 回复 2022-07-29
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号