28

私はこれをやろうとしています (予期しない T_VARIABLE エラーが発生します):

public function createShipment($startZip, $endZip, $weight = 
$this->getDefaultWeight()){}

私が使用しているオブジェクトには"defaultWeight"、重量を指定しない場合にすべての新しい出荷が取得するパラメーターがあるため、重量にマジックナンバーを入れたくありません。defaultWeightを出荷グループごとに変更するため、出荷自体に を入れることはできません。以下よりも良い方法はありますか?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
4

5 に答える 5

15

これはあまり良くありません:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = !$weight ? $this->getDefaultWeight() : $weight;
}

// or...

public function createShipment($startZip, $endZip, $weight=null){
    if ( !$weight )
        $weight = $this->getDefaultWeight();
}
于 2008-08-04T17:53:00.410 に答える
6

ブール OR 演算子を使用した巧妙なトリック:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
于 2008-08-28T08:10:48.643 に答える
1

静的クラスメンバーを使用して、デフォルトを保持できます。

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
于 2008-08-28T01:56:13.800 に答える
1

これにより、重み 0 を渡しても適切に動作することができます。=== 演算子に注意してください。これは、重みが値と型の両方で「null」に一致するかどうかを確認します (== とは対照的に、これは単に値であるため、0 == null == false)。

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
于 2008-08-05T12:49:44.517 に答える