2014-09-06 68 views
-3

我的問題是這樣的相似:Creating anonymous objects in phpPHP創建匿名對象,它擴展了一些

不同的是我想要一類由無名類進行擴展。

編輯:確定,不明確的,這裏是個例子:我想它在某種程度上

$anonim_obj = new stdClass(array(
    "foo" => function() { echo "foo"; }, 
    "bar" => function($bar) { echo $bar; } 
)); 

$anonim_obj = new stdClass extends BaseClass (array(
    "foo" => function() { echo "foo"; }, 
    "bar" => function($bar) { echo $bar; } 
)); 
+0

你是什麼意思?你的意思是你有一個班級,並想添加屬性?您可以。在PHP中,這被稱爲對象重載(壞術語):'$ instance-> newProperty = 123;'在實例上創建一個新的公共屬性。但是,真的,你不應該這樣做。通過分配閉包來分配方法是可能的,但這更加錯誤,因爲這些方法本身就是Closure對象的實例。此外:動態屬性訪問速度較慢,使您的代碼更容易出錯,難以維護 – 2014-09-06 16:14:32

+0

已更新,希望現在全部清除 – 2014-09-07 10:03:06

回答

1

什麼你想要做的是impossibru!。無法完成,沒辦法。忘掉它。結束。
匿名對象實際上是stdClass的一個實例,但不能對其進行在線擴展。你能做什麼,但是,是創建基礎類的一個實例你想要的stdClass從擴展和重載它(這是一個壞主意海事組織,但它是poissible):

$anonObj = new BaseClass();//create "parent" instance 
$anonObj->foo = function() 
{ 
    echo 'foo'; 
}; 
$anonObj->bar = function($bar) 
{ 
    echo $bar; 
}; 

原因爲什麼我認爲這「超載」是一個壞主意,是因爲:

  • 重載只是一個無聊的名詞,大部分時間超載,在OOP,意味着別的東西完全
  • 預先聲明的性質是q uick查找,添加到實例的屬性不是。 details here
  • 錯字的使你的代碼非常容易受到錯誤,嘶鳴上不可能調試
  • 您可以鍵入-提示的一類,它告訴你某些預先定義的方法和屬性將可用。如果你去添加屬性/方法,你失去了這個優勢

底線:如果你想要一個對象來擴展你的BaseClass,並有2種額外的方法:只寫血腥類,不要嘗試從定製的對象擴展通用對象。

+0

AAAAHHH完全正確!我是個白癡!!謝謝 :) – 2014-09-07 11:09:23