PHP में कास्टिंग चर टाइप करें, ऐसा करने का व्यावहारिक कारण क्या है?


45

PHP, जैसा कि हम में से अधिकांश जानते हैं, कमजोर टाइपिंग है । जो लोग नहीं करते हैं, उनके लिए PHP.net कहता है:

PHP को चर घोषणा में स्पष्ट प्रकार की परिभाषा (या समर्थन) की आवश्यकता नहीं है; एक चर का प्रकार उस संदर्भ से निर्धारित होता है जिसमें चर का उपयोग किया जाता है।

इसे प्यार करें या इसे नफरत करें, PHP फिर से उड़ने पर चर कास्ट करता है। तो, निम्न कोड मान्य है:

$var = "10";
$value = 10 + $var;
var_dump($value); // int(20)

PHP भी आपको स्पष्ट रूप से एक चर डालने की अनुमति देता है, जैसे:

$var = "10";
$value = 10 + $var;
$value = (string)$value;
var_dump($value); // string(2) "20"

यह सब अच्छा है ... लेकिन, मेरे जीवन के लिए, मैं ऐसा करने के लिए एक व्यावहारिक कारण की कल्पना नहीं कर सकता।

मुझे भाषाओं में मजबूत टाइपिंग की समस्या नहीं है जो इसका समर्थन करते हैं, जैसे जावा। यह ठीक है, और मैं इसे पूरी तरह से समझता हूं। इसके अलावा, मैं इस बात से वाकिफ हूं - और फंक्शन पैरामीटर में टाइपिंग की उपयोगिता को पूरी तरह से समझता हूं ।

टाइप कास्टिंग के साथ मुझे जो समस्या है वह उपरोक्त उद्धरण द्वारा बताई गई है। यदि PHP वसीयत में टाइप स्वैप कर सकती है, तो आप एक प्रकार का बल लगाने के बाद भी ऐसा कर सकते हैं ; और यह ऐसा कर सकते हैं ऑन-द-फ्लाई जब आप एक ऑपरेशन में एक खास प्रकार की जरूरत है। यह निम्नलिखित को मान्य बनाता है:

$var = "10";
$value = (int)$var;
$value = $value . ' TaDa!';
var_dump($value); // string(8) "10 TaDa!"

तो क्या बात है?


ऐसी दुनिया का सैद्धांतिक उदाहरण लें जहां उपयोगकर्ता परिभाषित प्रकार की कास्टिंग PHP में समझ में आता है :

  1. आप कलाकारों चर बल $fooके रूप में int(int)$foo
  2. आप चर में एक स्ट्रिंग मान संग्रहीत करने का प्रयास करते हैं $foo
  3. PHP एक अपवाद फेंकता है !! Sense इससे समझ में आएगा। अचानक उपयोगकर्ता परिभाषित प्रकार कास्टिंग का कारण मौजूद है!

तथ्य यह है कि PHP चीजों को चारों ओर स्विच करेगा जैसा कि उपयोगकर्ता परिभाषित प्रकार के कास्टिंग अस्पष्ट के बिंदु बनाता है। उदाहरण के लिए, निम्नलिखित दो कोड नमूने समतुल्य हैं:

// example 1
$foo = 0;
$foo = (string)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;

// example 2
$foo = 0;
$foo = (int)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;

मूल रूप से यह प्रश्न पूछने के एक साल बाद, अनुमान करें कि व्यावहारिक वातावरण में टाइपकास्टिंग का उपयोग करते हुए किसने खुद को पाया? आपका अपना।

आवश्यकता एक रेस्तरां मेनू के लिए वेबसाइट पर धन मूल्यों को प्रदर्शित करने की थी। साइट के डिजाइन के लिए आवश्यक है कि ट्रेलिंग जीरो को ट्रिम कर दिया जाए, ताकि डिस्प्ले कुछ इस तरह दिखे:

Menu Item 1 .............. $ 4
Menu Item 2 .............. $ 7.5
Menu Item 3 .............. $ 3

सबसे अच्छा तरीका है कि मैं एक नाव के रूप में चर कास्ट करने के लिए उस अपशिष्ट को करना पाया:

$price = '7.50'; // a string from the database layer.
echo 'Menu Item 2 .............. $ ' . (float)$price;

PHP फ्लोट के ट्रेलिंग जीरो को ट्रिम करता है, और फिर फ्लोट को कॉनकैटेशन के लिए एक स्ट्रिंग के रूप में पुन: बनाता है।


यह -> $ मूल्य = $ मूल्य। 'तादा!' $ मूल्य के अंतिम मूल्य को असाइनमेंट करने से पहले $ $ वापस स्ट्रिंग में डाल देंगे। वास्तव में आश्चर्य की बात नहीं है कि यदि आप एक प्रकार के कलाकारों को मजबूर करते हैं तो आपको एक प्रकार का कास्ट मिलता है। निश्चित नहीं है कि यह पूछने में कि बिंदु क्या है?
क्रिस

"# 3। PHP एक अपवाद फेंकता है !! <--- इसका मतलब होगा।" वास्तव में इसका कोई मतलब नहीं होगा। यह जावा, जावास्क्रिप्ट या किसी अन्य सी-सिंटैक्स भाषा में भी कोई समस्या नहीं है जिसे मैं जानता हूं। उनके सही दिमाग में कौन देखेगा कि वांछनीय व्यवहार के रूप में? क्या आप हर जगह(string) कास्ट करना चाहते हैं ?
निकोल

@ उत्पत्ति: आप मुझे गलत समझ रहे हैं। मेरा मतलब था कि एक अपवाद केवल तभी फेंक दिया जाएगा जब कोई उपयोगकर्ता किसी चर को टाइप करता है। सामान्य व्यवहार (जहां PHP आपके लिए कास्टिंग करता है) निश्चित रूप से एक अपवाद नहीं फेंकेंगे। मैं यह कहने की कोशिश कर रहा हूं कि उपयोगकर्ता द्वारा परिभाषित टाइप कास्टिंग मूट है , लेकिन अगर एक अपवाद को फेंक दिया गया तो यह अचानक समझ में आएगा।
स्टीफन

यदि आप कह रहे हैं कि $intval.'bar'एक अपवाद फेंकता है, तब भी मैं असहमत हूं। यह किसी भी भाषा में एक अपवाद नहीं है। (सभी भाषाएं जो मैं जानता हूं कि या तो एक स्वचालित कलाकार या एक .toString())। यदि आप कह रहे हैं कि $intval = $stringvalएक अपवाद है, तो आप एक जोरदार टाइप की हुई भाषा के बारे में बात कर रहे हैं। मैं अशिष्ट ध्वनि करने के लिए नहीं था, इसलिए, क्षमा करें यदि मैंने किया। मुझे लगता है कि यह हर डेवलपर के लिए उपयोग किया जाता है, और बहुत कम, बहुत कम सुविधाजनक है के खिलाफ जाता है।
निकोल

@ स्टेफेन - मैंने कुछ जांच के बाद एक जवाब पोस्ट किया। वास्तव में दिलचस्प परिणाम - मुझे लगा कि मामलों में से 2 निश्चित रूप से कास्टिंग के लिए एक उद्देश्य दिखाएगा, लेकिन PHP मेरे विचार से भी अधिक अजीब है।
निकोल

जवाबों:


32

एक कमजोर टाइप की गई भाषा में, टाइप-कास्टिंग टाइप किए गए कार्यों में अस्पष्टता को दूर करने के लिए मौजूद है, जब अन्यथा संकलक / दुभाषिया आदेश या अन्य नियमों का उपयोग करेगा, जिससे यह अनुमान लगाया जाए कि किस ऑपरेशन का उपयोग करना है।

आम तौर पर मैं कहूंगा कि PHP इस पैटर्न का अनुसरण करता है, लेकिन मैंने जिन मामलों की जाँच की है, उनमें से प्रत्येक में PHP ने प्रति-सहजता से व्यवहार किया है।

यहां वे मामले हैं, जावास्क्रिप्ट का उपयोग तुलना भाषा के रूप में करते हैं।

स्ट्रिंग संकेंद्रण

स्पष्ट रूप से यह PHP में कोई समस्या नहीं है क्योंकि अलग-अलग स्ट्रिंग कॉन्फिनेशन ( .) और जोड़ ( +) ऑपरेटर हैं।

जावास्क्रिप्ट
var a = 5;
var b = "10"
var incorrect = a + b; // "510"
var correct = a + Number(b); // 15

स्ट्रिंग तुलना

अक्सर कंप्यूटर सिस्टम में "5" "10" से अधिक होता है क्योंकि यह एक संख्या के रूप में व्याख्या नहीं करता है। PHP में ऐसा नहीं है, जो, भले ही दोनों तार हों, उन्हें पता चलता है कि वे संख्या हैं और कलाकारों की आवश्यकता को हटा देते हैं):

जावास्क्रिप्ट
console.log("5" > "10" ? "true" : "false"); // true
पीएचपी
echo "5" > "10" ? "true" : "false";  // false!

फंक्शन सिग्नेचर टाइपिंग

PHP फ़ंक्शन हस्ताक्षर पर एक नंगे हड्डियों के प्रकार की जाँच को लागू करता है, लेकिन दुर्भाग्य से यह इतना त्रुटिपूर्ण है कि यह शायद ही कभी उपयोग करने योग्य है।

मुझे लगा कि मैं कुछ गलत कर रहा हूं, लेकिन डॉक्स पर एक टिप्पणी इस बात की पुष्टि करती है कि PHP फ़ंक्शन हस्ताक्षर में सरणी के अलावा अन्य निर्मित प्रकारों का उपयोग नहीं किया जा सकता है - हालांकि त्रुटि संदेश भ्रामक है।

पीएचपी
function testprint(string $a) {
    echo $a;
}

$test = 5;
testprint((string)5); // "Catchable fatal error: Argument 1 passed to testprint()
                      //  must be an instance of string, string given" WTF?

और किसी भी अन्य भाषा के विपरीत, मुझे पता है, भले ही आप एक प्रकार का उपयोग करते हैं जो इसे समझता है, अशक्त को अब उस तर्क ( must be an instance of array, null given) में पारित नहीं किया जा सकता है । कितना मुर्ख।

बूलियन व्याख्या

[ संपादित करें ]: यह एक नया है। मैंने एक और मामले के बारे में सोचा, और फिर से तर्क जावास्क्रिप्ट से उलट है।

जावास्क्रिप्ट
console.log("0" ? "true" : "false"); // True, as expected. Non-empty string.
पीएचपी
echo "0" ? "true" : "false"; // False! This one probably causes a lot of bugs.

तो निष्कर्ष में, एकमात्र उपयोगी मामला जो मैं सोच सकता हूं वह है ... (ढोलक)

ट्रंकेशन टाइप करें

दूसरे शब्दों में, जब आपके पास एक प्रकार का मान होता है (स्ट्रिंग कहते हैं) और आप इसे दूसरे प्रकार (इंट) के रूप में व्याख्या करना चाहते हैं और आप इसे उस प्रकार के मूल्यों के मान्य सेट में से एक बनने के लिए मजबूर करना चाहते हैं:

$val = "test";
$val2 = "10";
$intval = (int)$val; // 0
$intval2 = (int)$val2; // 10
$boolval = (bool)$intval // false
$boolval2 = (bool)$intval2 // true
$props = (array)$myobject // associative array of $myobject's properties

मैं यह नहीं देख सकता कि क्या (जो एक प्रकार से अधिक मूल्यों को शामिल करता है) वास्तव में कभी भी आपको लाभान्वित करेगा।

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


ठीक है, E_NOTICEफिर कैसे ? :)
स्टीफन

@ स्टेफ़ेन E_NOTICEठीक हो सकता है, लेकिन मेरे लिए अस्पष्ट राज्य से संबंधित है - अगर आप उस राज्य में चर (कहीं और डाली गई हो) तो एक बिट कोड को देखकर कैसे जान पाएंगे? इसके अलावा, मैंने एक और शर्त ढूंढी और इसे अपने उत्तर में जोड़ दिया।
निकोल

1
बूलियन मूल्यांकन के लिए, PHP डॉक्स स्पष्ट रूप से बताता है कि बूलियन का मूल्यांकन करते समय क्या गलत माना जाता है और खाली स्ट्रिंग और एक स्ट्रिंग "0" को गलत माना जाता है। इसलिए जब भी यह विचित्र लगता है, यह सामान्य और अपेक्षित व्यवहार है।
जसक प्रुचि

भ्रम में थोड़ा जोड़ना echo "010" == 010echo "0x10" == 0x10
:;

1
ध्यान दें कि PHP 7 के रूप में , स्केलर टाइप हिंटिंग पर इस उत्तर के नोट्स गलत हैं।
जॉन वी।

15

आप कमजोर / मजबूत और गतिशील / स्थिर प्रकार की अवधारणाओं का मिश्रण कर रहे हैं।

PHP कमजोर और गतिशील है, लेकिन आपकी समस्या गतिशील प्रकार की अवधारणा के साथ है। इसका मतलब है कि, चर में एक प्रकार नहीं है, मान है।

एक 'टाइप कास्टिंग' एक अभिव्यक्ति है जो मूल के एक अलग प्रकार के नए मूल्य का उत्पादन करती है; यह चर के लिए कुछ भी नहीं करता है (यदि कोई शामिल है)।

एक स्थिति जहां मैं नियमित रूप से डाली मान टाइप करता हूं वह संख्यात्मक एसक्यूएल मापदंडों पर है। आप SQL कथन में सम्मिलित किए गए किसी इनपुट मूल्य से बचने / बचने या बहुत बेहतर उपयोग करने वाले पैरामीटर प्रश्नों का उपयोग करने वाले हैं। लेकिन, यदि आप कुछ ऐसा मूल्य चाहते हैं जो एक पूर्णांक होना चाहिए, तो इसे डालना आसान है।

विचार करें:

function get_by_id ($id) {
   $id = (int)$id;
   $q = "SELECT * FROM table WHERE id=$id LIMIT 1";
   ........
}

अगर मैंने पहली पंक्ति को छोड़ दिया, $idतो SQL इंजेक्शन के लिए एक आसान वेक्टर होगा। कलाकार यह सुनिश्चित करता है कि यह एक हानिरहित पूर्णांक है; किसी SQL को सम्मिलित करने के किसी भी प्रयास के परिणामस्वरूप बस एक क्वेरी होगीid=0


वो मैं मान लूँगा। अब, जहाँ तक टाइप कास्टिंग की उपयोगिता है?
स्टीफन

यह मजेदार है कि आप SQL इंजेक्शन लाते हैं। मैं इस तकनीक का उपयोग करने वाले किसी व्यक्ति के साथ SO पर बहस कर रहा था ताकि यूजर इनपुट को साफ किया जा सके। लेकिन इस विधि से क्या समस्या हल होती mysql_real_escape_string($id);है जो पहले से नहीं है?
स्टीफन

यह छोटा है :-) बेशक, तार के लिए मैं मानकीकृत प्रश्नों का उपयोग करता हूं, या (यदि पुराने mysql एक्सटेंशन का उपयोग कर रहा है) इससे बच जाएं।
जेवियर

2
mysql_real_escape_string()'0x01ABCDEF' (यानी एक पूर्णांक का हेक्साडेसिमल प्रतिनिधित्व) जैसे तारों के कुछ भी नहीं करने की एक भेद्यता है। कुछ मल्टीबाइट एन्कोडिंग्स (यूनिकोड सौभाग्य से नहीं) में इस तरह एक स्ट्रिंग का उपयोग क्वेरी को तोड़ने के लिए किया जा सकता है (क्योंकि यह MySQL द्वारा मूल्यांकन किया जाता है जिसमें कुछ ऐसा होता है जिसमें एक उद्धरण होता है)। यही कारण है कि न तो है mysql_real_escape_string()और न ही is_int()पूर्णांक मूल्यों से निपटने के लिए सबसे अच्छा विकल्प है। टाइपकास्टिंग है।
Mchl 12

कुछ और विवरणों के साथ एक लिंक: ilia.ws/archives/…
Mchl

4

PHP में टाइप कास्टिंग के लिए एक उपयोग जो मैंने पाया है:

मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं जो डेटाबेस से डेटा प्राप्त करने के लिए सर्वर पर PHP स्क्रिप्ट के लिए http अनुरोध करता है। स्क्रिप्ट PHP ऑब्जेक्ट (या साहचर्य सरणी) के रूप में डेटा संग्रहीत करती है और ऐप में JSON ऑब्जेक्ट के रूप में वापस आती है। टाइप कास्टिंग के बिना मुझे कुछ इस तरह मिलेगा:

{ "user" : { "id" : "1", "name" : "Bob" } }

लेकिन, (int)PHP ऑब्जेक्ट को यूजर के आईडी पर कास्टिंग करते समय उपयोग करते हुए इसे PHP ऑब्जेक्ट के रूप में इस्तेमाल किया जाता है, मुझे यह बदले में ऐप में वापस मिल जाता है:

{ "user" : { "id" : 1, "name" : "Bob" } }

फिर जब JSON ऑब्जेक्ट को ऐप में पार्स किया जाता है, तो यह मुझे एक पूर्णांक में आईडी को पार्स करने से बचाता है!

देखें, बहुत उपयोगी है।


मैंने उपभोग करने के लिए बाहरी, मजबूत-टाइप सिस्टम के लिए डेटा स्वरूपण करने पर विचार नहीं किया था। +1
स्टीफन

यह विशेष रूप से सच है जब जेन्सन को एलिस्टिक्स खोज जैसे बाहरी सिस्टम से बात कर रहे हैं। एक json_encode () - एड वैल्यू "5" मान 5 से बहुत अलग परिणाम देगा।
जोहान फ्रेड्रिक वर्न

3

एक उदाहरण एक __toString विधि के साथ ऑब्जेक्ट है: $str = $obj->__toString();बनाम $str = (string) $obj;। दूसरे में बहुत कम टाइपिंग है, और अतिरिक्त सामान विराम चिह्न है, जिसे टाइप करने में अधिक समय लगता है। मुझे भी लगता है कि यह अधिक पठनीय है, हालांकि अन्य असहमत हो सकते हैं।

एक और एकल-तत्व सरणी बना रहा है: array($item);बनाम (array) $item;। यह किसी भी स्केलर प्रकार (पूर्णांक, संसाधन, आदि) को एक सरणी के अंदर रखेगा।
आस्थावान रूप से, यदि $itemकोई वस्तु है, तो उसके गुण उनके मूल्यों की कुंजी बन जाएंगे। हालाँकि, मुझे लगता है कि वस्तु-> सरणी रूपांतरण थोड़ा अजीब है: निजी और संरक्षित गुण सरणी का हिस्सा हैं, और इसका नाम बदला गया है। PHP दस्तावेज़ीकरण को उद्धृत करने के लिए : निजी चर में वर्ग का नाम होता है जो चर नाम से पहले होता है; संरक्षित चर में चर नाम के लिए एक '*' है।

एक अन्य उपयोग GET / POST डेटा को डेटाबेस के लिए उपयुक्त प्रकारों में परिवर्तित कर रहा है। MySQL इसे स्वयं हैंडल कर सकता है लेकिन मुझे लगता है कि अधिक ANSI- अनुरूप सर्वर डेटा को अस्वीकार कर सकते हैं। मेरे द्वारा केवल डेटाबेस का उल्लेख करने का कारण यह है कि अधिकांश अन्य मामलों में, डेटा का किसी बिंदु पर उसके प्रकार के अनुसार एक ऑपरेशन किया जाएगा (यानी इंट / फ़्लोट्स में आमतौर पर उन पर गणना की जाती है, आदि)।


ये कैसे कास्टिंग काम करता है के महान उदाहरण हैं। फिर भी, मुझे यकीन नहीं है कि वे एक ज़रूरत भरते हैं । हां, आप किसी ऑब्जेक्ट को एक सरणी में बदल सकते हैं, लेकिन क्यों? मुझे लगता है कि क्योंकि आप नए सरणी पर असंख्य PHP सरणी फ़ंक्शंस का उपयोग कर सकते हैं, लेकिन मैं थाह नहीं कर सकता कि यह कैसे उपयोगी होगा। इसके अलावा, PHP आमतौर पर MySQL डेटाबेस को भेजने के लिए स्ट्रिंग क्वेरीज़ बनाता है, इसलिए चर प्रकार अप्रासंगिक है ( क्वेरी बनाते समय स्वचालित स्ट्रिंग रूपांतरण से होगा intया floatहोगा)। (array) $itemहै साफ , लेकिन उपयोगी?
स्टीफन

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

अहा! आपने पैरामीटर क्वेरी के साथ मान्य कारण मारा हो सकता है।
स्टीफन

0

यह स्क्रिप्ट:

$tags = _GET['tags'];
foreach ($tags as $tag) {
    echo 'tag: ', $tag;
}

के लिए ठीक चलेगा, script.php?tags[]=oneलेकिन इसके लिए असफल होगा script.php?tags=one, क्योंकि _GET['tags']पहले मामले में एक सरणी देता है , लेकिन दूसरे में नहीं। चूंकि स्क्रिप्ट एक सरणी की उम्मीद करने के लिए लिखी गई है (और आपके पास स्क्रिप्ट पर भेजे गए क्वेरी स्ट्रिंग पर कम नियंत्रण है), समस्या को उचित रूप से परिणाम कास्टिंग से हल किया जा सकता है _GET:

$tags = (array) _GET['tags'];
foreach ($tags as $tag) {
    echo 'tag: ', $tag;
}

0

यह एक त्वरित और गंदे तरीके के रूप में भी इस्तेमाल किया जा सकता है ताकि यह सुनिश्चित किया जा सके कि अविश्वासित डेटा का उपयोग नहीं किया जा सकता है, यदि दूरस्थ सेवा का उपयोग किया जाता है, जिसमें केवल मान्यता रद्द है और केवल संख्या स्वीकार करनी चाहिए।

$amount = (float) $_POST['amount'];

if( $amount > 0 ){
    $remoteService->doacalculationwithanumber( $amount );    
}

जाहिर है कि यह त्रुटिपूर्ण है और यदि इस कथन में तुलना ऑपरेटर द्वारा निहित है, लेकिन यह सुनिश्चित करने में सहायक है कि आपको पता है कि आपका कोड क्या कर रहा है।


1
सिवाय इसके कि यह टूटता नहीं है। यहां तक ​​कि अगर $_POST['amount']एक कचरा स्ट्रिंग शामिल है, तो php मूल्यांकन करेगा कि यह शून्य से अधिक नहीं था। यदि इसमें एक स्ट्रिंग होती है जो एक सकारात्मक संख्या का प्रतिनिधित्व करती है, तो यह सच का मूल्यांकन करेगी।
स्टीफन

1
पूरी तरह से सच नहीं है। विचार करें कि सशर्त के भीतर $ तीसरी राशि को एक पार्टी सेवा में पारित किया जा रहा है जिसे एक नंबर प्राप्त करना होगा। यदि किसी को $ _POST ['राशि'] = "100 बॉबींस" में पास करना होता है, तो हटाने (फ्लोट) को अभी भी सशर्त पारित करने की अनुमति होगी लेकिन $ राशि एक संख्या नहीं होगी।
ग्रूफ़पुट्स

-2

PHP का एक "उपयोग", जो मैं अक्सर उपयोग में देखता हूं, पर फिर से कास्टिंग चर है जब बाहरी स्रोतों (उपयोगकर्ता इनपुट या डेटाबेस) से डेटा पुनर्प्राप्त कर रहा है। यह कोडर देता है (ध्यान दें कि मैंने डेवलपर्स को नहीं कहा) अलग-अलग स्रोतों से उपलब्ध विभिन्न डेटाटिप्स को अनदेखा करें (या नहीं भी सीखें)।

एक कोडर (ध्यान दें कि मैंने डेवलपर को नहीं कहा था) जिसका कोड मुझे विरासत में मिला है और अभी भी बनाए रखने के बारे में नहीं पता है कि सुपर चर में वापस आने वाले स्ट्रिंग के बीच एक अंतर मौजूद है , पूर्णांक ऑपरेशन के बीच"20"$_GET20 + 20 जब वह इसे जोड़ता है डेटाबेस में मान। वह केवल खुशकिस्मत है कि PHP .स्ट्रिंग कॉन्फैटिनेशन के लिए उपयोग करती है और +हर दूसरी भाषा की तरह नहीं , क्योंकि मैंने उसका कोड "दो तार" ( varcahrMySQL से और एक मान $_GET) जोड़कर देखा और एक इंट प्राप्त किया।

क्या यह एक व्यावहारिक उदाहरण है? केवल इस अर्थ में कि यह कोडर्स को यह जानने से दूर कर देता है कि वे किस डेटाटाइप के साथ काम कर रहे हैं। मैं व्यक्तिगत रूप से इससे नफरत करता हूं।


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

धन्यवाद स्टीफन। मैंने शायद यह कहने के लिए बहुत सारे शब्दों का उपयोग किया है "PHP उन लोगों को देता है जो नहीं जानते हैं कि डेटाटाइप क्या अनुप्रयोग बनाता है जो वे आदर्श स्थिति के तहत उम्मीद करते हैं"।
dotancohen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.