php - Verwenden der Objekteigenschaft als Standard für die Methodeneigenschaft

Translate

Ich versuche dies zu tun (was einen unerwarteten T_VARIABLE-Fehler erzeugt):

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

Ich möchte dort keine magische Zahl für das Gewicht eingeben, da das von mir verwendete Objekt eine hat"defaultWeight"Parameter, den alle neuen Sendungen erhalten, wenn Sie kein Gewicht angeben. Ich kann das nicht sagendefaultWeightin der Sendung selbst, da sie von Sendungsgruppe zu Sendungsgruppe wechselt. Gibt es einen besseren Weg als den folgenden?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Das ist nicht viel besser:

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();
}
Quelle
Translate

Ordentlicher Trick mit booleschem ODER-Operator:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Quelle
Translate

Auf diese Weise können Sie eine Gewichtung von 0 übergeben und trotzdem ordnungsgemäß arbeiten. Beachten Sie den Operator ===, der prüft, ob das Gewicht sowohl im Wert als auch im Typ mit "null" übereinstimmt (im Gegensatz zu ==, das nur ein Wert ist, also 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Quelle
Translate

Sie können ein statisches Klassenmitglied verwenden, um die Standardeinstellung beizubehalten:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Quelle
Translate

Wenn Sie PHP 7 verwenden, können Sie die Antwort von Kevin verbessern:

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