簡體   English   中英

我應該如何在try / catch塊中解決此代碼異味

[英]How should I fix this code smell in my try/catch block

好。 我在IDE中收到代碼氣味警告。 我理解原因,並了解警告並不是特別嚴重。 但是,如果有更好的方法來編寫此塊,我想知道。

public function factory($state_name = 'Generic')
{
    ...

    try {
        if (!$class_exists) {
            throw new CustomException;
        } else {
            return new $class_name;
        }
    }
    catch (CustomException $c) {
        echo ...
    }

}

我不會在try塊之外返回任何值。 如果我最后還給我一個,氣味就會消失。 有一個更好的方法嗎?

對我來說,更大的代碼氣味是您引發異常,然后立即捕獲它。 看來您這樣做是為了避免返回任何東西,這當然是您的IDE抱怨的。 我將其重寫為:

public function factory($state_name = 'Generic')
{
    ...

    if ($class_exists) {
        return new $class_name;
    }
    return null;

}

您的函數是一個工廠,應隱式返回它創建的內容。 在諸如Java之類的靜態類型語言中,您必須聲明一個返回類型,並且無論如何都要返回一些內容。 用靜態類型語言編寫的函數將無法編譯。 我們在PHP中沒有這些問題,因此您可以做到這一點,但是肯定可以聞到。 最好的做法是讓函數以一致的方式運行,即無論發生什么都始終返回某些內容。 在您嘗試/捕獲之后,我將返回null,並始終檢查從該函數返回的值,無論它在哪里使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM