Usando propriedade de objeto como padrão para a propriedade método

votos
21

Eu estou tentando fazer isso (que produz um erro T_VARIABLE inesperada):

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

Eu não quero colocar um número mágico lá por peso, uma vez que o objeto que eu estou usando tem um defaultWeightparâmetro que todos os novos carregamentos começar se você não especificar um peso. Eu não posso colocar o defaultWeightno próprio transporte, porque ele muda de grupo embarque para grupo da expedição. Existe uma maneira melhor de fazer isso do que o seguinte?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Publicado 04/08/2008 em 18:51
fonte usuário
Em outras línguas...                            


4 respostas

votos
12

Esta não é muito melhor:

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();
}
Respondeu 04/08/2008 em 18:53
fonte usuário

votos
6

truque com operador booleano OR:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Respondeu 28/08/2008 em 09:10
fonte usuário

votos
1

Você pode usar um membro da classe estática para manter o padrão:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Respondeu 28/08/2008 em 02:56
fonte usuário

votos
1

Isso permitirá que você passe um peso de 0 e ainda funcionar corretamente. Observe o operador ===, este verifica para ver se o peso corresponde "null" em valor e tipo (em oposição a ==, que é apenas valor, portanto, 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Respondeu 05/08/2008 em 13:49
fonte usuário

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