Mit dem Objekt-Eigenschaft als Standard-Methode für Eigenschaft
-
08-06-2019 - |
Frage
Ich bin versucht, dies zu tun (was produziert ein unerwarteter T_VARIABLE Fehler):
public function createShipment($startZip, $endZip, $weight =
$this->getDefaultWeight()){}
Ich nicht wollen, um eine Magische Zahl gibt es für Gewicht, da das Objekt ich verwende, hat eine "defaultWeight"
parameter, die alle neuen Sendungen erhalten, wenn Sie nicht angeben ein Gewicht.Ich kann nicht den defaultWeight
in der Sendung selbst, weil es ändert sich von Versand group-Versand-Gruppe.Gibt es einen besseren Weg, es zu tun als die folgenden?
public function createShipment($startZip, $endZip, weight = 0){
if($weight <= 0){
$weight = $this->getDefaultWeight();
}
}
Lösung
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();
}
Andere Tipps
Neat trick mit booleschen ODER-operator:
public function createShipment($startZip, $endZip, $weight = 0){
$weight or $weight = $this->getDefaultWeight();
...
}
Dies wird Ihnen ermöglichen, pass ein Gewicht von 0 und immer noch ordnungsgemäß funktionieren.Hinweis der operator===, diese überprüft, um zu sehen, ob das Gewicht entspricht "null", sowohl in Wert und Typ (im Gegensatz zu ==, das ist nur Wert, also 0 == null == false).
PHP:
public function createShipment($startZip, $endZip, $weight=null){
if ($weight === null)
$weight = $this->getDefaultWeight();
}
Sie können ein statisches Mitglied einer Klasse zu halten die Standard:
class Shipment
{
public static $DefaultWeight = '0';
public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
// your function
}
}
Die Verbesserung auf Kevins Antwort, wenn Sie mit PHP 7, die Sie machen können:
public function createShipment($startZip, $endZip, $weight=null){
$weight = $weight ?: $this->getDefaultWeight();
}