Mit Objekteigenschaft als Standard für die Methode Eigenschaft

stimmen
21

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

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

Ich will nicht eine magische Zahl in dort zuzunehmen, da das Objekt ich verwende einen hat defaultWeightParameter, der alle neuen Sendungen erhalten , wenn Sie nicht ein Gewicht angeben. Ich kann das nicht setzen defaultWeightin der Sendung selbst, weil sie aus dem Versand Gruppe Sendung Gruppe ändert. Gibt es einen besseren Weg , um es als die folgenden zu tun?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Veröffentlicht am 04/08/2008 um 18:51
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
12

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();
}
Beantwortet am 04/08/2008 um 18:53
quelle vom benutzer

stimmen
6

Ordentlich Trick mit boolean OR-Operator:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Beantwortet am 28/08/2008 um 09:10
quelle vom benutzer

stimmen
1

Sie können eine statische Klassenmember verwenden den Standard zu halten:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Beantwortet am 28/08/2008 um 02:56
quelle vom benutzer

stimmen
1

Dies ermöglicht es Ihnen, ein Gewicht von 0 bis passieren und nach wie vor richtig. Beachten Sie den Operator ===, überprüfen diese, um zu sehen, wenn das Gewicht entspricht „null“ in Wert und Typ (wie in == gegenüber, die nur Wert ist, so 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Beantwortet am 05/08/2008 um 13:49
quelle vom benutzer

stimmen
0

Die Verbesserung auf Kevins Antwort, wenn Sie PHP 7 verwenden Sie tun können:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Beantwortet am 04/06/2019 um 12:34
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more