2009-09-14 14 views
5

मैं तर्कों को एक फ़ंक्शन में सहयोगी सरणी में पैरामीटर वैरिएबल नामों के बराबर कुंजी और पैरामीटर मानों के बराबर मानों को परिवर्तित करना चाहता हूं।मैं एक PHP फ़ंक्शन की पैरामीटर सूची को एक सहयोगी सरणी में कैसे परिवर्तित कर सकता हूं?

पीएचपी:

function my_function($a, $b, $c) { 

    // <--- magic goes here to create the $params array 

    var_dump($params['a'] === $a); // Should result in bool(true) 
    var_dump($params['b'] === $b); // Should result in bool(true) 
    var_dump($params['c'] === $c); // Should result in bool(true) 
} 

मैं यह कैसे कर सकते हैं?

+0

क्या कोई कारण है कि आप प्रारंभिक फ़ंक्शन को केवल पहले तर्क के रूप में स्वीकार करने और सरणी को फ़ीड करने के लिए परिभाषित नहीं कर सकते हैं? –

+1

मध्यस्थ: वह 1) एक बदसूरत एपीआई प्रदान करेगा, और 2) कॉलिंग स्रोत में बहुत सारे बदलाव की आवश्यकता है। इनमें से कई कार्य पहले से मौजूद हैं और उन्हें बुलाया जा रहा है। – Fragsworth

+1

मुझे सच में नहीं लगता कि यह एक "बदसूरत" एपीआई क्यों होगा - मेरे लिए यह क्लीनर होगा और पाइथन में तर्क और ईसीएमएस्क्रिप्ट में वस्तुओं को खिलाने के रूप में शब्दकोशों को खिलाने के समान होगा। –

उत्तर

10

, जिसे आप compact का उपयोग कर ऐसा कर सकते हैं:

function myFunc($a, $b, $c) { 
    $params = compact('a', 'b', 'c'); 
    // ... 
} 

या, get_defined_vars() आप सभी चर कि दायरे में परिभाषित के एक साहचर्य सरणी है, जो काम करेगा दे देंगे, लेकिन मुझे लगता है कि यह भी $_POST शामिल हो सकता है, $_GET, आदि ...

अन्यथा, आप कार्य को पारित सभी तर्कों की एक सूची प्राप्त करने के लिए func_get_args का उपयोग कर सकते हैं। यह सहयोगी हालांकि है, क्योंकि यह केवल डेटा है जो पारित किया गया है (यानी, कोई परिवर्तनीय नाम नहीं है)। इससे आपको अपने फ़ंक्शन में कई तर्क मिल सकते हैं।

या, बस एक तर्क है, जो एक सरणी है निर्दिष्ट करें:

function myFunc($params) { 

} 

compact() आप हालांकि बाद क्या कर रहे हैं के सबसे करीब हो रहा है।

+0

कारण मुझे यह पसंद नहीं है वैरिएबल नाम दोहराया जाना है। – Fragsworth

+1

तब 'get_defined_vars' पर देखें। – nickf

7

get_defined_vars() यदि आपको फ़ंक्शन के अंदर बुलाए जाने से पहले कोई अन्य वर्र्स परिभाषित नहीं किया गया है तो आप इसकी आवश्यकता है (आप इसे फ़ंक्शन के अंदर पहली चीज़ बनाकर सुनिश्चित कर सकते हैं)।

function my_function($a, $b, $c) { 

    $params = get_defined_vars(); // <--- create the $params array 

    var_dump($params['a'] === $a); // results in bool(true) 
    var_dump($params['b'] === $b); // results in bool(true) 
    var_dump($params['c'] === $c); // results in bool(true) 
} 
+0

मुझे वर्षों से इसका इस्तेमाल करना चाहिए था। सही उत्तर। – user3751385

1

मैं @ nickf के जवाब upvoted लेकिन जोड़ने के लिए है कि कॉम्पैक्ट() भी एक शानदार तरीका एक ctor का उपयोग कर एक मॉडल का दृष्टांत है चाहते हैं:

class User { 
    public $email; 
    public $password; 
    public $firstName; 
    public $lastName; 

    public function __construct ($email, $password, $firstName, $lastName) 
    { 
     foreach (compact(array_keys((array)$this)) as $k => $v) 
      $this->$k = $v; 
    } 
} 

बस सुनिश्चित करें कि पैरामीटर है कि बनाने के खेतों के समान सटीक वर्तनी।

+0

जो मैं खोज रहा था - लेकिन अभी भी एक अपवित्र को न्यायसंगत बनाने के लिए पर्याप्त चाल नहीं है। – user3751385

संबंधित मुद्दे

 संबंधित मुद्दे