2017-06-25 70 views
0

我在wordpress中使用了一个插件,它需要我定义的每个短代码来扩展一个函数。我以某种方式设置了我的代码,这意味着要返回并扩展所有类很困难。例如,插件预计这样的:从变量创建一个类并使用它来扩展另一个类?

class WPBakeryShortCode_myCode extends WPBakeryShortCodesContainer {} 

我想与一个变量来替换“mycode的”,因为我都存储在数组中的可能的码。所以我想要

class WPBakeryShortCode_$customCode extends WPBakeryShortCodesContainer {} 

即使用一个变量来定义一个类,然后扩展另一个类。我试过这种方式的每一个方法都犯了一个错误。任何想法我可以做到这一点?

+0

如果所有这些类都具有相同的功能,为什么还要拥有它们?如果您稍后需要进行区分,只需将您的标识符作为构造函数参数传递即可。 – Yoshi

+0

你能举个例子吗? –

+0

问问自己你将使用这些生成的类。由于它们在运行时无法更改,它们很可能都会共享相同的行为。这意味着,你想在类名中使用'$ customeCode'是唯一有意义的区别,因此应该是* data *。例如https://3v4l.org/2RIi0或者如果你只是想要一个共同的地方来存储这些代码,使用常量:https://3v4l.org/cUWLB – Yoshi

回答

0

你不能在运行时从一个变量实例化一个。

有没有推荐的方式来动态地做到这一点,因为生成的类必须被实例化之前的变量进行评估

使用Eval是不好的做法及其不建议,如果你想知道的是如何在这里例如

[email protected]:/tmp$ cat test.php 
<?php 

class A { } 
class B { 
    function iamB(){ 
     print "From B".PHP_EOL; 
    } 
} 

$myvariable = 'B'; 


$code =<<<EOF 
    class C extends $myvariable { 
    public static function bar(){ 
     print "not recommended".PHP_EOL; 
    } 
    } 
EOF; 

eval($code); 

C::iamB(); 
C::bar(); 

?> 

输出

[email protected]:/tmp$ php test.php 
From B 
not recommended 
相关问题