在php中创建匿名对象,扩展了一些东西

时间:2014-09-06 16:12:50

标签: php

我的问题类似于:Creating anonymous objects in php

不同之处在于我希望无名类扩展一个类。

编辑:好的,不清楚,这是一个例子:

$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; } 
));

1 个答案:

答案 0 :(得分:1)

您尝试做的是 impossibru!。无法完成,无法完成。忘掉它。结束。
匿名对象确实是stdClass的一个实例,但您无法对其进行内联扩展。但是,你可以做的是创建一个你希望stdClass扩展的基类的实例,并重载它(这是一个坏主意IMO,但它是可能的):

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

原因为什么我认为"重载" 是一个坏主意是因为:

  • 重载只是一个愚蠢的术语,大多数时候在OOP中重载,完全意味着其他东西
  • 可以快速找到预先声明的属性,而不是添加到实例的属性。 details here
  • Typo使您的代码极易受到错误的影响,并且无法调试
  • 您可以输入类的提示,告诉您某些预定义的方法和属性可用。如果你随意添加属性/方法,那么你就会失去这个优势。

底线:如果你想让一个对象扩展你的BaseClass,并且有两个额外的方法:只要编写一个血腥的类,不要试图从定制的对象中扩展通用对象。