Χρησιμοποιώντας ακίνητο αντικείμενο ως προεπιλογή για μέθοδο ακίνητο

ψήφοι
21

Προσπαθώ να κάνω αυτό (η οποία παράγει ένα μη αναμενόμενο σφάλμα T_VARIABLE):

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

Δεν θέλω να τεθεί ένα μαγικό αριθμό εκεί για το βάρος, δεδομένου ότι το αντικείμενο είμαι χρησιμοποιώντας έχει μια defaultWeightπαράμετρο που όλες οι νέες αποστολές πάρει αν δεν καθορίσετε ένα βάρος. Δεν μπορεί να βάλει το defaultWeightστην ίδια την αποστολή, γιατί αλλάζει από την ομάδα αποστολής στην ομάδα αποστολής. Υπάρχει καλύτερος τρόπος για να το κάνει από το ακόλουθο εκεί;

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Δημοσιεύθηκε 04/08/2008 στις 18:51
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
12

Αυτό δεν είναι πολύ καλύτερη:

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();
}
Απαντήθηκε 04/08/2008 στις 18:53
πηγή χρήστη

ψήφοι
6

Τακτοποιημένο τέχνασμα με Boolean OR χειριστή:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Απαντήθηκε 28/08/2008 στις 09:10
πηγή χρήστη

ψήφοι
1

Μπορείτε να χρησιμοποιήσετε ένα στατικό μέλος τάξη για να κρατήσει την προεπιλεγμένη:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Απαντήθηκε 28/08/2008 στις 02:56
πηγή χρήστη

ψήφοι
1

Αυτό θα επιτρέψει σε σας για να περάσετε ένα βάρος 0 και εξακολουθεί να λειτουργεί σωστά. Ανακοίνωση για το χειριστή ===, αυτό ελέγχει αν το βάρος ταιριάζει «null» τόσο αξία και το είδος (σε αντίθεση με ==, το οποίο είναι ακριβώς αξία, οπότε 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Απαντήθηκε 05/08/2008 στις 13:49
πηγή χρήστη

ψήφοι
0

Βελτίωση κατά την απάντηση του Kevin αν χρησιμοποιείτε PHP 7 μπορείτε να κάνετε:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Απαντήθηκε 04/06/2019 στις 12:34
πηγή χρήστη

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