Usar la propiedad del objeto como predeterminado para la propiedad del método

votos
21

Estoy intentando hacer esto (lo que produce un error T_VARIABLE inesperado):

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

No quiero poner un número mágico allí para el peso, ya que el objeto que estoy usando tiene un defaultWeightparámetro que todos los nuevos envíos obtienen si no especificas un peso. No puedo ingresar el defaultWeightenvío, ya que cambia de grupo de envío a grupo de envío. ¿Hay una mejor manera de hacerlo que la siguiente?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Publicado el 04/08/2008 a las 18:51
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
12

Esto no es mucho mejor:

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();
}
Respondida el 04/08/2008 a las 18:53
fuente por usuario

votos
6

Buen truco con el operador booleano OR:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Respondida el 28/08/2008 a las 09:10
fuente por usuario

votos
1

Puede usar un miembro de clase estática para mantener el valor predeterminado:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Respondida el 28/08/2008 a las 02:56
fuente por usuario

votos
1

Esto le permitirá pasar un peso de 0 y seguir trabajando correctamente. Observe el operador ===, esto comprueba si el peso coincide con "nulo" tanto en valor como en tipo (en lugar de ==, que es solo valor, entonces 0 == nulo == falso).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Respondida el 05/08/2008 a las 13:49
fuente por usuario

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