2008-08-04 12 views
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(); 
    } 
} 

उत्तर

13

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

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

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

पीएचपी:

public function createShipment($startZip, $endZip, $weight=null){ 
    if ($weight === null) 
     $weight = $this->getDefaultWeight(); 
} 
+0

[@ pix0r] (# 2213) यह एक अच्छा मुद्दा है, हालांकि, यदि आप मूल कोड को देखते हैं तो वजन 0 के रूप में पारित किया जाता है तो यह डिफ़ॉल्ट वजन का उपयोग करता है। – Kevin

1

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

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

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

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