2010-12-31 12 views
32

का अवलोकन अब मैं PHP में प्रोग्रामिंग कर रहा हूं, लेकिन मैंने कभी भी किसी भी शॉर्टेंड का उपयोग करने के बारे में कभी नहीं सीखा है। मैं समय-समय पर कोड में आ जाता हूं और इसे पढ़ने में कठिनाई होती हूं, इसलिए मैं भाषा के लिए मौजूद अलग-अलग शॉर्टंड सीखना चाहता हूं ताकि मैं इसे पढ़ सकूं और इसका उपयोग करके समय/रेखाओं को सहेजना शुरू कर सकूं, लेकिन मुझे सभी शॉर्टेंड का व्यापक अवलोकन नहीं मिल रहा है।PHP शॉर्टेंड

एक Google खोज बहुत अधिक विशेष रूप से अगर/अन्य कथन के लिए शॉर्टेंड दिखाती है, लेकिन मुझे पता है कि वहां से कहीं अधिक होना चाहिए।

($var) ? true : false; 
+0

"शॉर्टंड" से आपका क्या मतलब है? –

+2

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

+0

अब PHP 5.4 में: 'प्रिंट $ var?:' Foo'' अगर आप बस यह जांचना चाहते हैं कि मान सत्य है या "foo" की डिफ़ॉल्ट स्ट्रिंग का उपयोग करें। – Xeoncross

उत्तर

64

PHP में उपयोग किए जाने वाले कुछ शॉर्टेंड ऑपरेटर यहां दिए गए हैं।

//If $y > 10, $x will say 'foo', else it'll say 'bar' 
$x = ($y > 10) ? 'foo' : 'bar'; 

//Short way of saying <? print $foo;?>, useful in HTML templates 
<?=$foo?> 

//Shorthand way of doing the for loop, useful in html templates 
for ($x=1; $x < 100; $x++): 
    //Do something 
end for; 

//Shorthand way of the foreach loop 
foreach ($array as $key=>$value): 
    //Do something; 
endforeach; 

//Another way of If/else: 
if ($x > 10): 
    doX(); 
    doY(); 
    doZ(); 
else: 
    doA(); 
    doB(); 
endif; 

//You can also do an if statement without any brackets or colons if you only need to 
//execute one statement after your if: 

if ($x = 100) 
    doX(); 
$x = 1000; 

// PHP 5.4 introduced an array shorthand 

$a = [1, 2, 3, 4]; 
$b = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 
+7

वह * वैकल्पिक वाक्यविन्यास * "शॉर्टंड" कैसा है? यह कुछ भी है, अगर कुछ भी है। मैं ' deceze

+0

'$ x = 'xxxx'; $ x && $ सरणी ['नया'] = $ x'। इसका क्या मतलब है? – Serjas

+0

'$ x = 'xxxx'; अगर ($ x और ($ array ['news'] = $ x)) {// nothing} ' – Xeoncross

3

यह त्रिगुट ऑपरेटर, एक बूलियन ऑपरेटर तीन ऑपरेंड है कि कहा जाता है::

आशुलिपि, मैं की तरह सामान के बारे में बात कर रहा हूँ

पहले मूल्यांकन करने के लिए बूलियन अभिव्यक्ति है ।

दूसरा यह निष्पादन करने की अभिव्यक्ति है कि बुलियन अभिव्यक्ति सत्य पर मूल्यांकन करती है या नहीं।

तीसरा यह निष्पादित करने की अभिव्यक्ति है कि बूलियन अभिव्यक्ति गलत तरीके से मूल्यांकन करती है या नहीं।

+3

इसके अलावा, यह ऑपरेटर अधिकांश सी-शैली भाषाओं में मौजूद है, न केवल php। –

22

पीएचपी 5.3 की शुरुआत की:

$foo = $bar ?: $baz; 

जो $foo को $bar का मूल्य प्रदान करती है, तो $bar को true (बाकी $baz) मूल्यांकन करता है।

आप टर्नरी ऑपरेटर (कोष्ठक के उचित उपयोग के साथ) घोंसला भी कर सकते हैं।

इसके अलावा, इसके बारे में और कुछ नहीं है। आप documentation पढ़ना चाहेंगे।

+0

@ फ़ेलिक्स क्या इसकी तुलना जावास्क्रिप्ट में '||' ऑपरेटर से की जाएगी? –

+0

@ जैकोब रिलिकिन: मैं यह नहीं कह सकता कि यह हर मामले में समान काम करता है लेकिन आम तौर पर इसका एक ही प्रभाव होता है (बहुत सटीक होने के लिए, जेएस में '||' PHP में भी '||' है;) (यह सिर्फ रिटर्न PHP में एक बूलियन और मूल्य नहीं))। –

+0

@ फ़ेलिक्स हाँ, यह मैंने जो सोचा था उसके बारे में है। :) –

15

PHP में मेरी पसंदीदा "चाल" में से एक है जब इस तरह के कार्यों कि तर्क की एक सरणी ले, मूलभूत मूल्यों पर वापस गिरने के रूप में स्थितियों से निपटने array union ऑपरेटर का प्रयोग है।

उदाहरण के लिए, निम्न कार्य है जो एक तर्क के रूप एक सरणी स्वीकार करता है और पता चला है कि कुंजी 'color', 'shape', और 'size' स्थापित कर रहे हैं की जरूरत है पर विचार करें। लेकिन हो सकता है कि उपयोगकर्ता हमेशा यह नहीं जानता कि ये क्या होगा, इसलिए आप उन्हें कुछ डिफ़ॉल्ट प्रदान करना चाहते हैं। सरणी संघ ऑपरेटर का उपयोग एक अच्छा "आशुलिपि" इस क्लीनर बनाने के लिए किया जा सकता है

function get_thing(array $thing) 
{ 
    if (!isset($thing['color'])) { 
     $thing['color'] = 'red'; 
    } 
    if (!isset($thing['shape'])) { 
     $thing['shape'] = 'circle'; 
    } 
    if (!isset($thing['size'])) { 
     $thing['size'] = 'big'; 
    } 
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}"; 
} 

हालांकि,:

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

function get_thing_2(array $thing) 
{ 
    $defaults = array(
     'color' => 'red', 
     'shape' => 'circle', 
     'size' => 'big', 
    ); 
    $thing += $defaults; 
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}"; 
}  

एक और मजेदार बात यह है कि anonymous functions है, (और बंद किया जाना, पीएचपी 5.3 में प्रस्तुत)।उदाहरण के लिए, दो से एक सरणी के प्रत्येक तत्व कई करने के लिए, आप बस अनुसरण कर सकता है:

array_walk($array, function($v) { return $v * 2; }); 
+0

' array_map' भी वही काम करने के लिए उपयोग किया जा सकता है array_walk के रूप में? –

+0

वे समान हैं। 'array_map' मान द्वारा एक सरणी स्वीकार करता है और एक नई सरणी देता है, जबकि' array_walk' सरणी को स्वयं संशोधित करता है। यादृच्छिक डाउनवोट को संतुलित करने के लिए – mfonda

+1

+1। यह कुछ वैध कोड है। मैं 'array_merge ($ डिफ़ॉल्ट, $ चीज़)' पसंद करता हूं, लेकिन यूनियन भी ठीक हैं। – deceze

1

तो, याकूब Relkin सही है कि "आशुलिपि" है कि आप का उल्लेख वास्तव में "त्रिगुट" कहा जाता है में पूरी तरह से है ऑपरेटर, और सैम डुफेल कहते हैं, यह अन्य भाषाओं में बहुत प्रचलित है। इस भाषा के आधार पर यह कैसे लागू होता है, यह सर्वर के तर्क को समझने के लिए भी तेज हो सकता है, साथ ही साथ आप इसे और अधिक तेज़ी से पढ़ सकते हैं।

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

$ वर सच है:

($var) ? true : false; 

यह क्या के रूप में पढ़ा जाना चाहिए है? यदि $ var है, मूल्य को वास्तविक वापस करें। यदि $ var झूठा है, मान झूठी वापस करें।

प्रश्न चिह्न आपको याद दिलाने में मदद करता है कि आप एक प्रश्न पूछ रहे हैं जो आउटपुट निर्धारित करता है।

टर्नरी ऑपरेटर के लिए एक अधिक आम उपयोग-मामला तब होता है जब आप किसी ऐसे चीज की जांच कर रहे होते हैं जो जूलियन नहीं है, लेकिन आप इसका वर्णन करने के लिए बूलियन तर्क का उपयोग कर सकते हैं। उदाहरण के लिए ऑब्जेक्ट Car लें, जिसमें color नामक एक संपत्ति है, जो स्ट्रिंग-जैसी चर (PHP में) है। आप अगर एक स्ट्रिंग सही या गलत है, क्योंकि है कि कोई मतलब नहीं है नहीं पूछ सकते हैं, लेकिन आप इसके बारे में अलग अलग सवाल पूछ सकते हैं:

$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all."; 

echo $output; 

तो इस लाइन पढ़ता है इस प्रकार है:

का रंग है कार "नीली" स्ट्रिंग के समान ही है?
यदि यह है, स्ट्रिंग वापस करें "यह कार नीली है!", अन्यथा स्ट्रिंग वापस करें "यह कार बिल्कुल नीली नहीं है।"

जो भी टर्नरी ऑपरेटर रिटर्न का उपयोग $ आउटपुट के साथ असाइनमेंट कथन के दाएं हाथ में किया जा रहा है, और उस स्ट्रिंग को तब मुद्रित किया जाता है।

1
<?php 
class bob { 

public function isDebug(){ 
    return true; 
} 

public function debug(){ 
     echo 'yes dice!!!'; 
    } 
} 


$bob = new bob(); 

($bob->isDebug()) && $bob->debug(); 

यहां शॉर्टंड का एक और संस्करण है। उम्मीद है कि यह किसी को

2

कोई भी ?? का उल्लेख नहीं करता है!

<?php 
// Example usage for: Null Coalesce Operator 
$action = $_POST['action'] ?? 'default'; 

// The above is identical to this if/else statement 
if (isset($_POST['action'])) { 
    $action = $_POST['action']; 
} else { 
    $action = 'default'; 
} 
+3

PHP 7 में पेश किया गया। वास्तव में एक उपयोगी ऑपरेटर। '??' और '?: 'के बारे में अधिक जानकारी: https://stackoverflow.com/questions/34571330/php-ternary-operator-vs-null-coalescing-operator –

2

PHP7 में भी नया स्पेसशिप ऑपरेटर है। usort() जैसी चीज़ों के लिए कॉलबैक में अधिकतर उपयोगी।

से पहले:

usort($list, function ($a, $b) { 
    if ($a == $b) return 0; 
    return $a < $b; 
}); 

के बाद:

usort($list, function ($a, $b) { return $a <=> $b; }); 

असल में, यह एक नकारात्मक पूर्णांक, 0, या एक सकारात्मक पूर्णांक दाईं ओर से बाईं ओर की तुलना के आधार पर देता है।

+0

कुछ हद तक इस उदाहरण से संबंधित है, भविष्य में वहां होगा संभवतः एक शॉर्टेंड अनाम फ़ंक्शन सिंटैक्स हो सकता है, उदाहरण को कुछ और कम किया जा सकता है जैसे: 'usort ($ list, fn ($ a, $ b) => $ <=> $ b);' यह थोड़ा उलझन में दिख सकता है लेकिन यह इसका मतलब है कि '=>' का बायां फ़ंक्शन हस्ताक्षर है और इसका अधिकार वह शरीर है जो केवल एक पंक्ति है और उस पंक्ति का परिणाम देता है ('वापसी' के बावजूद स्पष्ट रूप से लिखा नहीं जा रहा है)। – Okonomiyaki3000

0

5.4 जब से तुम भी तो तुम अब लिखने की ज़रूरत सरणी शाब्दिक है:

$myArray = array('some', 'list', 'of', 'stuff'); 

तुम बस लिख सकते हैं:

$myArray = ['some', 'list', 'of', 'stuff']; 

नहीं एक बहुत बड़ा अंतर है, लेकिन बहुत अच्छा।

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