visual una que propiedades propiedad programacion metodos informatica definicion clase autoimplementada accesores php parameters error-handling

php - una - Usar la propiedad del objeto como predeterminado para la propiedad del método



propiedades en programacion (4)

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 parámetro de "defaultWeight" que obtienen todos los envíos nuevos si no especificas 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(); } }


Buen truco con el operador booleano OR:

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


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


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


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 } }