Method for calculating shipping cost
What if you have an order, that is 


> 10lb in total weight
&lt; $100 in subtotal 
has no product with > 10lb? 


Your method would not return anything in that case.

Here's my patched solution:

public function addShippingCost($subtotal) {
    $shipCost = 0;
    $weightSum = 0;
    $allItemsUnder10lb = true;

    foreach ($this-&gt;products as $product) {
        if($product-&gt;getWeight() &gt; 10){
            $shipCost += $this::RATE_HEAVY;
            $allItemsUnder10lb = false;
        }
        $weightSum += $product-&gt;getWeight();
    }

    if ($subtotal &lt; 100 &amp;&amp; $weightSum &lt; 10) {
        $shipCost = $this::RATE_FLAT;
    } 

    if ($subtotal &gt;= 100 &amp;&amp; $allItemsUnder10lb) {
        $shipCost = $this::RATE_FREE;
    }

    return $shipCost;
}