2012-08-25 7 views
24

मैं अपने PHP ज्ञान पर विस्तार करना चाहता हूं, और मैं कुछ ऐसा हुआ जो मुझे यकीन नहीं है कि यह क्या है या यहां तक ​​कि इसे कैसे खोजा जाए। मैं php.net इन्सेट कोड देख रहा हूं, और मुझे isset($_GET['something']) ? $_GET['something'] : ''

मैं if(isset($_GET['something']){ If something is exists, then it is set and we will do something } जैसे सामान्य जारी किए गए संचालन को समझता हूं, लेकिन मुझे समझ में नहीं आता है, दोबारा दोहराना, या '' 'दोहराएं। क्या कोई मेरे लिए इसे तोड़ने में मदद कर सकता है या कम से कम मुझे सही दिशा में इंगित कर सकता है?

+2

संबंधित http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol- मतलब-में-php – Musa

+1

संभावित डुप्लिकेट [PHP क्या है? : ऑपरेटर बुलाया और यह क्या करता है?] (http://stackoverflow.com/questions/1080247/what-is-the-php-operator-called-and-what-does-it-do) – Niko

उत्तर

50

यह आमतौर पर 'आशुलिपि' या Ternary Operator रूप में जाना जाता है।

$test = isset($_GET['something']) ? $_GET['something'] : ''; 

मतलब है

if(isset($_GET['something'])) { 
    $test = $_GET['something']; 
} else { 
    $test = ''; 
} 

इसे तोड़ने के लिए नीचे:

$test = ... // assign variable 
isset(...) // test 
? ... // if test is true, do ... (equivalent to if) 
: ... // otherwise... (equivalent to else) 

या ...

// test --v 
if(isset(...)) { // if test is true, do ... (equivalent to ?) 
    $test = // assign variable 
} else { // otherwise... (equivalent to :) 
1

? टर्नरी (सशर्त) ऑपरेटर कहा जाता है: example

6

इसे एक टर्नरी ऑपरेटर कहा जाता है और इसका मुख्य रूप से एक और कथन के स्थान पर उपयोग किया जाता है।

उदाहरण आप इसे एक सरणी दिया isset से मान प्राप्त करने के लिए इस्तेमाल किया जा सकता दे दी है में सच रिटर्न

isset($_GET['something']) ? $_GET['something'] : '' 

if (isset($_GET['something'])) { 
    $_GET['something']; 
} else { 
    ''; 
} 

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

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous' 
4

आपको ternary operator का सामना करना पड़ा है। इसका उद्देश्य मूलभूत अगर अन्य कथन का है। कोड के निम्नलिखित टुकड़े एक ही काम करते हैं।

त्रिगुट:

$something = isset($_GET['something']) ? $_GET['something'] : "failed"; 

हैं-बाकी:

if (isset($_GET['something'])) { 
    $something = $_GET['something']; 
} else { 
    $something = "failed"; 
} 
1

आप में एक Ternary Operator कहा जाता है क्या देख रहे हैं, और आप PHP implementation here पा सकते हैं। यह if else कथन है।

if (isset($_GET['something']) == true) { 
    thing = isset($_GET['something']); 
} else { 
    thing = ""; 
} 
3

php 7 से आप यह भी कम लिख सकते हैं:

$age = $_GET['age']) ?? 27; 

और इसका मतलब यह है कि अगर उम्र परम यूआरएल यह $age वर पर सेट हो जाएगा में प्रदान की जाती है, या 27

लागू हो जाएगी

सभी new features of php 7

1

आप एक खाली स्ट्रिंग डिफ़ॉल्ट चाहते हैं तो एक पसंदीदा तरीका के इन (अपनी जरूरत के आधार पर) एक है:

$str_value = strval($_GET['something']); 
$trimmed_value = trim($_GET['something']); 
$int_value = intval($_GET['somenumber']); 

url पैरामीटर somethingURL में मौजूद नहीं है तो $_GET['something']null

strval($_GET['something']) वापस आ जाएगी ->strval(null) ->""

और अपने चर $value पर सेट है एक खाली स्ट्रिंग।

  • trim() कोड के आधार पर strval() से अधिक पसंद किया जा सकता है
  • intval() अगर अंकीय मान उम्मीद कर रहे हैं (उदाहरण के लिए एक नाम पैरामीटर इसका उपयोग करना चाहते हो सकता है) और डिफ़ॉल्ट शून्य है। intval(null) ->0

मामले पर विचार करने के:

...&something=value1&key2=value2 (ठेठ)

...&key2=value2 (पैरामीटर यूआरएल $ _GET से लापता अशक्त इसके लिए वापस आ जाएगी)

...&something=+++&key2=value (पैरामीटर " " है)

यह क्यों एक पसंदीदा है पप्रोच:

  • यह एक पंक्ति पर अच्छी तरह से फिट बैठता है और यह स्पष्ट हो रहा है कि क्या हो रहा है।
  • यह पठनीय है कॉपी/पेस्ट गलती की $value = isset($_GET['something']) ? $_GET['something'] : '';
  • लोअर जोखिम या लिखने में कोई त्रुटि से: $value=isset($_GET['something'])?$_GET['somthing']:'';
  • यह पुरानी और नई php के साथ संगत है।

अद्यतन सख्त मोड कुछ इस तरह की आवश्यकता हो सकती:

$str_value = strval(@$_GET['something']); 
$trimmed_value = trim(@$_GET['something']); 
$int_value = intval(@$_GET['somenumber']); 
संबंधित मुद्दे