2016-07-18 8 views
12

क्या PHP 7 संसाधनों के लिए सख्त टाइपिंग का समर्थन करता है? यदि हां, तो कैसे?PHP 7 और सख्त "संसाधन" प्रकार

उदाहरण के लिए:

declare (strict_types=1); 

    $ch = curl_init(); 
    test ($ch); 

    function test (resource $ch) 
    { 

    } 

उपरोक्त त्रुटि दे देंगे:

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of resource, resource given

$ch पर एक var_dump संसाधन (4, कर्ल) होने के लिए यह पता चलता है, और मैनुअल का कहना है curl_init() एक संसाधन देता है।

$ch variable का समर्थन करने के लिए test() फ़ंक्शन को सख्ती से टाइप करना संभव है?

उत्तर

19

पीएचपी जरूरत नहीं है।

function assert_resource($resource) 
{ 
    if (false === is_resource($resource)) { 
     throw new InvalidArgumentException(
      sprintf(
       'Argument must be a valid resource type. %s given.', 
       gettype($resource) 
      ) 
     ); 
    } 
} 

जो आप तो ऐसे ही अपने कोड के भीतर इस्तेमाल कर सकते हैं:

function test($ch) 
{ 
    assert_resource($ch); 
    // do something with resource 
} 
एक पुन: प्रयोज्य संस्करण इस तरह एक अभिकथन होगा
6

resourcevalid type नहीं है, इसलिए यह पुराने पुराने PHP/5 प्रकार संकेतों के अनुसार कक्षा का नाम माना जाता है। लेकिन curl_init() ऑब्जेक्ट इंस्टेंस वापस नहीं करता है।

जहां तक ​​मुझे पता है कि संसाधन निर्दिष्ट करने का कोई तरीका नहीं है। यह शायद इतना उपयोगी नहीं होगा क्योंकि सभी संसाधन समान नहीं हैं: fopen() द्वारा उत्पन्न संसाधन oci_parse() के लिए बेकार होगा। एक क्योंकि type hint for resources

No type hint for resources is added, as this would prevent moving from resources to objects for existing extensions, which some have already done (e.g. GMP).

हालांकि, अगर आप is_resource() समारोह/विधि शरीर के भीतर का उपयोग कर सकते पारित कर दिया तर्क की पुष्टि करने और इसे संभाल रूप में की जरूरत के लिए

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