विधि संपत्ति के लिए डिफ़ॉल्ट रूप से ऑब्जेक्ट प्रॉपर्टी का उपयोग करना

मैं ऐसा करने की कोशिश कर रहा हूं (जो एक अप्रत्याशित 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();
    }
}
0
जोड़ा संपादित
विचारों: 1

4 उत्तर

यह बहुत बेहतर नहीं है:

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();
}
0
जोड़ा

यह आपको 0 का वजन पास करने और अभी भी ठीक से काम करने की अनुमति देगा। === ऑपरेटर पर ध्यान दें, यह जांचने के लिए जांच करता है कि क्या वजन दोनों मान और प्रकार में "शून्य" से मेल खाता है (जैसा कि == के विपरीत है, जो कि केवल मूल्य है, इसलिए 0 == शून्य == झूठी)।

पीएचपी:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
0
जोड़ा
[@ pix0r] (# 2213) यह एक अच्छा मुद्दा है, हालांकि, अगर आप मूल कोड को देखते हैं तो वजन 0 के रूप में पारित किया जाता है तो यह डिफ़ॉल्ट वजन का उपयोग करता है।
जोड़ा लेखक Kevin, स्रोत

बूलियन या ऑपरेटर के साथ साफ चाल:

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

आप डिफ़ॉल्ट रखने के लिए एक स्थिर वर्ग सदस्य का उपयोग कर सकते हैं:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
0
जोड़ा