2009-11-13 23 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不是最好的選擇。然而,我認真地懷疑,需要真正,更好的設計,你可以避免一起使用它。