2017-06-25 33 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 
相關問題