2013-01-10 10 views
5

मुझे समझ में आया कि PHP में int और integer के बीच कोई अलग नहीं है, तो मुझे बहुत कुछ नहीं था। मुझे गलत होना चाहिए।PHP: इंटीजर को int-getting त्रुटि में परिवर्तित करना

मैं एक फ़ंक्शन के लिए एक पूर्णांक मान पास कर रहा हूं जिसमें केवल इस मान पर int है। इसलिए जैसा: -

$new->setPersonId((int)$newPersonId); // Have tried casting with (int) and intval and both 

दूसरी तरफ मेरे पास है: - -

public function setPersonId(int $value) { 
     // foobar 
    } 

अब, जब मैं चलाने मैं संदेश मिलता है: -

"पीएचपी Catchable घातक त्रुटि: तर्क 1 setPersonId() को पास किया गया है int, इंटीजर का एक उदाहरण होना चाहिए "

मैंने कॉल (int) और intval() के साथ कॉल में कास्टिंग करने का प्रयास किया है।

कोई विचार?

+0

पीएचपी मानक डेटा प्रकार के लिए टाइप इशारा समर्थन नहीं करता (पूर्णांक , युगल), लेकिन ऑब्जेक्ट्स के प्रकार-संकेत का समर्थन करता है। – gurudeb

+0

ज़रूर - मैंने इसे भी पढ़ा - तो समाधान क्या है? – waxical

+1

सार्वजनिक फ़ंक्शन सेट से 'int' को हटाएं PersonId (int $ value) – gurudeb

उत्तर

14

PHP में संकेत टाइप करना केवल ऑब्जेक्ट्स के लिए काम करता है और स्केलर नहीं, इसलिए PHP उम्मीद कर रहा है कि आप "int" प्रकार की ऑब्जेक्ट पास कर रहे हैं।

आप निम्न का उपयोग कर सकते एक समाधान

public function setPersonId($value) { 
    if (!is_int($value)) { 
     // Handle error 
    } 
} 
+0

निश्चित रूप से, मैंने इसे पढ़ा - लेकिन फिर आप इसे कैसे संभालेंगे? आप कन्वर्ट नहीं कर सकते? क्या हम कह रहे हैं कि मूल्य को शुरुआत या कुछ भी नहीं होना चाहिए। – waxical

+1

यदि आप मान int होना चाहते हैं, लेकिन 'is_int' झूठा रिटर्न देता है, तो आप इसे '$ value = (int) $ मान डाल सकते हैं;'। यदि आपको कोई परवाह नहीं है या नहीं, तो बस 'is_int' चेक को हटा दें। – fin1te

+0

यह बहुत डरावना है, लेकिन स्वीकार्य रूप से जाने का एकमात्र तरीका लगता है। PHP इसे प्राप्त नहीं करता है:/ – waxical

-2

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

http://php.net/manual/en/language.types.integer.php

+0

उत्तर के पास कहीं भी नहीं। – waxical

-3

सुनिश्चित करें कि PersonID संपत्ति पूर्णांक नहीं पूर्णांक के रूप में परिभाषित किया गया है बनाओ:

private int $personId; 

बजाय

private integer $personId; 
+0

आप PHP में नहीं हैं, है ना? –

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