2008-08-04 22 views
21

que estoy tratando de hacer esto (que produce un error inesperado T_VARIABLE):Usando propiedad del objeto por defecto para la propiedad método

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

no quiero poner un número mágico allí por peso, ya el objeto que estoy usando tiene un parámetro "defaultWeight" que todos los envíos nuevos obtienen si no especifica un peso. No puedo poner el defaultWeight en el envío en sí, porque cambia del grupo de envío al 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(); 
    } 
} 

Respuesta

13

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(); 
} 
1

Esto le permitirá pasar un peso de 0 y aún funcione 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(); 
} 
+0

[@ pix0r] (# 2213) Ese es un buen punto, sin embargo, si observas el código original si el peso se pasa como 0 usa el peso predeterminado. – Kevin

1

Se puede utilizar un miembro de la clase estática para mantener el valor por defecto:

class Shipment 
{ 
    public static $DefaultWeight = '0'; 
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) { 
     // your function 
    } 
} 
6

Buen truco con el operador booleano O:

public function createShipment($startZip, $endZip, $weight = 0){ 
    $weight or $weight = $this->getDefaultWeight(); 
    ... 
} 
Cuestiones relacionadas