Utilizzando proprietà dell'oggetto come predefinita per la proprietà metodo

voti
21

Sto cercando di fare questo (che produce un errore T_VARIABLE inaspettato):

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

Non voglio mettere un numero magico in là per il peso, dal momento che l'oggetto che sto usando ha un defaultWeightparametro che tutte le nuove spedizioni ottengono se non si specifica un peso. Non posso mettere il defaultWeightnella spedizione per sé, perché cambia dal gruppo spedizione al gruppo della spedizione. C'è un modo migliore per farlo che di seguito?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
È pubblicato 04/08/2008 alle 18:51
fonte dall'utente
In altre lingue...                            


4 risposte

voti
12

Questo non è molto meglio:

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();
}
Risposto il 04/08/2008 a 18:53
fonte dall'utente

voti
6

trucchetto con operatore booleano OR:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Risposto il 28/08/2008 a 09:10
fonte dall'utente

voti
1

È possibile utilizzare un membro della classe statica per tenere il default:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Risposto il 28/08/2008 a 02:56
fonte dall'utente

voti
1

Questo vi permetterà di passare un peso di 0 ed ancora funzionare correttamente. Si noti l'operatore ===, questa verifica se peso corrisponde "nullo" in valore e tipo (in opposizione a ==, che è solo valore, quindi 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Risposto il 05/08/2008 a 13:49
fonte dall'utente

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