Pomocí vlastnosti objektu jako výchozí pro metodu majetku

hlasů
21

Snažím se to dělat (což vytváří neočekávanou chybu T_VARIABLE):

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

Nechci, aby se magické číslo tam na hmotnosti, protože objekt Já používám má defaultWeightparametr, aby všechny nové zásilky získat, pokud nechcete specifikovat váhu. Nemohu dal defaultWeightv samotném zásilce, protože to změní z expedice skupiny zásilky skupiny. Existuje lepší způsob, jak to udělat, než následující?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Položena 04/08/2008 v 18:51
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
12

To není o moc lepší:

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();
}
Odpovězeno 04/08/2008 v 18:53
zdroj uživatelem

hlasů
6

Pěkný trik s logickou nebo provozovatel:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Odpovězeno 28/08/2008 v 09:10
zdroj uživatelem

hlasů
1

Můžete použít statický člen třídy držet výchozí:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Odpovězeno 28/08/2008 v 02:56
zdroj uživatelem

hlasů
1

To vám umožní přenést váhu 0 a stále pracovat správně. Všimněte si, že operátor ===, to zkontroluje, zda hmotnost odpovídá „nula“ v obou hodnoty a typu (na rozdíl od ==, což je jen hodnota, takže 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Odpovězeno 05/08/2008 v 13:49
zdroj uživatelem

hlasů
0

Zlepšení na Kevina odpověď, pokud používáte PHP 7 můžete udělat:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Odpovězeno 04/06/2019 v 12:34
zdroj uživatelem

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