第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

別名在php中不存在的類名

別名在php中不存在的類名

PHP
UYOU 2022-07-29 12:32:07
考慮以下代碼: use ReplacementClass; class A extends ReplacementClass { }此代碼中的ReplacementClass名稱應(yīng)該只是一個占位符,一個未定義的、不存在的類。在運行時或運行之前,我想為這個不存在的類加上一個動態(tài)設(shè)置的現(xiàn)有類的別名,以使我的代碼能夠工作。PHP中有什么方法可以做到這一點嗎?為什么我要實現(xiàn)這一點,是A在上面的示例中定義的,是項目插件中的一個類,我想使其可移植,所以ReplacementClass在原始插件中也是如此。我想為團(tuán)隊保留一個選項,以擴(kuò)展這些類,并向它們添加新功能,這些僅在他們正在處理的特定項目中需要。在上述情況下,如果這兩個都是真正的類,我可以用 擴(kuò)展一個B類A,并在 中添加新功能B,我也可以ReplacementClassSpecific用擴(kuò)展ReplacementClass并為其添加新功能,但是鑒于 PHP 的單繼承,我不能不要同時擴(kuò)展。
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊

您可以做到這一點的一種方法是使用 class_exists,如果它不存在,則添加一個虛擬占位符。


但理想情況下,我建議您研究 Laravel 使用的 Facades。通過這種方式,您可以靈活地實現(xiàn),而無需依賴?yán)^承。


在線查看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";


查看完整回答
反對 回復(fù) 2022-07-29
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗 獲得超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 效率低下并且可能非常危險。在考慮使用它之前,請先查閱文檔。


最好重新考慮您的用例。從字面上看,我想不出什么需要完全動態(tài)的類名。如果此時您將庫導(dǎo)入代碼庫,您應(yīng)該知道預(yù)期的類名,此時您可以使用該名稱的類擴(kuò)展您的父類。


查看完整回答
反對 回復(fù) 2022-07-29
  • 2 回答
  • 0 關(guān)注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號