2009-11-13 74 views
0

这个问题是关系到downcasting in php5多么昂贵的这个PHP向下转换解决方法

这个PHP是如何昂贵的向下转换解决方法吗?

这个PHP下变频解决方法太昂贵了吗?

我回应microtimes和它似乎需要0.001。我想知道这可能是一个大问题。

public static function to($obj) { 

    return unserialize(preg_replace(
    '/^O:\d+:\"(\w+)/', 
    'O:' . strlen('this_class_name') . ':"' . 'this_class_name', 
    serialize($obj))); 
} 

http://php.net/manual/en/language.types.type-juggling.php建议的解决方案的评论是类似的。

+4

当你想测试成本时,你不应该运行一次。在循环中运行数千次,并打印出所需的时间。然后找出你的应用程序中正常的通话量,看看它是否很贵:) – 2009-11-13 13:44:42

回答

2

通过显示时间0.001(秒,我假设),您似乎已经回答了您自己的操作是多么昂贵的问题。

至于是否也是昂贵,我想说,最好通过比较它的替代方案来回答。

从另一个SO问题的答案中可以找到一个替代方案,即构造一个新的对象。你将不得不尝试看看这种方法是否更快。

你的代码看起来很麻烦,它似乎来自PHP页面的“toma at smartsemantics dot com”。我试图找出你的$obj可能是什么,以及关于你的问题的一点背景,看看是否有任何替代方案不涉及向下转换。

可能在PHP中故意禁止使用向下转换来阻止人们使用向下转换。这是因为根据Liskov替代原则,需要它的OOP设计存在缺陷。

+0

问题是以下内容。找出我从数据库中自动生成模型(Zend_Model_X)。我从那些模型中添加了额外方法的子类。问题是,如果我使用fetchList,我得到的是一个Zend_Model_X列表,所以这些自定义方法是不可用的。典型的Java解决方案是向下转换的。另一种解决方案是使用fetchListArray方法,但我真的更喜欢一个对象数组。 而且,那个代码不是我的。我想要一种通用代码从对象中复制的方法。这样我可以编写这种向下转换方法的代码。 – ktulur 2009-11-13 23:48:41

2

我真的不认为你应该关心这是多么昂贵,而是担心你试图在应用程序级别将高级功能实现为编程语言。这似乎是一个非常糟糕的主意。

如果在您的web应用程序中需要向下转换,也许PHP不是最好的选择。然而,我认真地怀疑,需要真正,更好的设计,你可以避免一起使用它。