PHP

2013-02-20 20 views
16

में कोड कोड बनाने के लिए घुंघराले ब्रैकेट का उपयोग करें क्या PHP में ब्रैकेट के भीतर कोड टुकड़े को संलग्न करना संभव है (फ़ंक्शन के रूप में टुकड़े का उपयोग किए बिना)?PHP

क्या निम्न कोड वही व्यवहार करेगा जैसा कि घुंघराले ब्रैकेट के बिना होगा? या ब्रैकेट के अंदर या बाहर किस तरह का कोड इस्तेमाल किया जाता है, इस पर निर्भर करता है कि कोई समस्या हो सकती है?

उदाहरण के लिए, इस जाएगा:

<?php 

// First Code-Block 
{# several lines of code 
} 

// Second Code-Block 
{# another several lines of code 
} 

?> 

हमेशा इस रूप में एक ही तरह से व्यवहार:

<?php 

// First Code-Block 
# several lines of code 

// Second Code-Block 
# another several lines of code 

?> 
+0

तुम्हारा मतलब है, की तरह कुछ बिना 'अगर (सही) {... } '? किस लिए? – user113215

+0

मैं वास्तव में कोड के हिस्से को लपेटकर कचरा संग्रह प्रबंधित करने के लिए एक तरीका लागू करना चाहता हूं जो सेगमेंट/कथन पूरा होने के बाद सुरक्षित रूप से एकत्र किया जा सकता है। – superhero

+0

यह वास्तव में मदद करता है जब आपके पास कोड के बड़े हिस्से होते हैं और स्क्रॉलिंग समय के साथ परेशानी हो जाती है जब आपके पास एक संपादक होता है जो आपको ब्लॉक को "पतन" करने की अनुमति देता है, जिससे आप अभी इस कोड पर ध्यान केंद्रित करना आसान बनाते हैं – My1

उत्तर

4

यदि आप इसे घुंघराले ब्रैकेट में संलग्न करते हैं तो PHP कोड व्यवहार नहीं बदलता है। हालांकि, आप घुंघराले ब्रैकेट के अंदर कुछ PHP कथन का उपयोग नहीं कर सकते:

  • namespace घोषणाएं;
  • नामस्थान use उपनामों के लिए घोषणा या किसी भी नाम आयात;
  • वैश्विक const घोषणाएं;
  • __halt_compiler()

इसका मतलब यह है, निम्न स्क्रिप्ट काम करेगा:

<?php 
const x = 5; 
echo x; 

लेकिन निम्नलिखित संकलन नहीं होगा:

<?php 
{ 
    const x = 5; 
    echo x; 
} 
26

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

अद्यतन:

यह मैनुअल में यह करने के लिए एक संदर्भ को खोजने के लिए खुदाई का एक सा लिया, लेकिन यहाँ यह है:

http://www.php.net/manual/en/control-structures.intro.php

किसी भी PHP स्क्रिप्ट बाहर बनाया गया है बयान की एक श्रृंखला का। एक कथन एक असाइनमेंट, एक फ़ंक्शन कॉल, लूप, एक सशर्त कथन या यहां तक ​​कि एक कथन भी हो सकता है जो कुछ भी नहीं (खाली कथन)। वक्तव्य आमतौर पर अर्धविराम से समाप्त होते हैं। इसके अलावा, कथन ब्रेसिज़ के साथ बयानों के समूह को encapsulating द्वारा कथन समूह को एक कथन समूह में समूहीकृत किया जा सकता है। एक कथन समूह स्वयं भी एक बयान है। इस अध्याय में विभिन्न कथन प्रकारों का वर्णन किया गया है।

कुंजी यहाँ बयान घुंघराले ब्रेसिज़ साथ बयान के एक समूह encapsulating द्वारा एक बयान-समूह में बांटा जा सकता है।

मैं भी variable scope के लिए एक संदर्भ के लिए एक नज़र था के रूप में यह इस स्थिति से संबंधित है, लेकिन मैनुअल विशेष रूप से यह उल्लेख नहीं है, लेकिन आप इस तरह से इसके बारे में सोच सकते हैं:

पीएचपी, कार्यों और कक्षाओं में एक चरणीय दायरा बनाएँ। आप उस here के बारे में पढ़ सकते हैं। लेकिन एक बयान समूह (ऊपर वर्णित अनुसार) नहीं है। फ़ंक्शन (या कक्षा) रैपिंग ब्रैकेट जैसे कथन-समूह के घुंघराले ब्रेसिज़ के बारे में न सोचें, लेकिन उन पर घुंघराले ब्रेसिज़ की तरह सोचें जो कंट्रोल स्ट्रक्चर के कथन समूह को लपेटते हैं (if, for, while, switch, आदि ।) - क्योंकि यह वही है जो वे हैं। यह स्पष्ट है कि यदि आप if कथन (या कोई अन्य नियंत्रण संरचना) का उपयोग कर रहे हैं कि ब्रेसिज़ एक नया दायरा पेश नहीं करते हैं, तो वे केवल बयान के ब्लॉक के लिए रैपर हैं।

+1

हाँ मैं नहीं कर सकता ऐसा करने के लिए एक अच्छे कारण के बारे में सोचें। यदि यह कार्यात्मक रूप से '{}' (नियंत्रण संरचनाओं, कार्यों, आदि ..) की आवश्यकता नहीं है तो यह मूर्खतापूर्ण और इसे करने में भ्रमित लगता है। – prodigitalson

+1

@ ल्यूक मिल: धन्यवाद, मुझे यह जानकारी PHP संदर्भ में कहां मिल सकती है (मैं पूछने से पहले उम्र की तलाश में था)? – Albin

+2

@prodigitalson: कारण: मुझे मूल सेटिंग्स (नोटपैड ++) के साथ एक कोड संपादक का उपयोग करना है जो केवल टिप्पणी-ब्लॉक (*// *) और कार्यात्मक-ब्लॉक ({}) को कॉल करता है। – Albin

0

मैं यह भी करता हूं, पूरी तरह से मेरे टेक्स्ट एडिटर (कॉमोडो एडिट 8.5) के कारण। यह "खराब कारण" या "खराब कोडिंग" नहीं है, अगर यह आपकी मदद करता है और कोई समस्या नहीं पैदा करता है और यदि ऐसा करने का कोई और आसान तरीका नहीं है।

मैं के साथ एक काम के आसपास समस्या का समाधान:

if(1 == 1){ //always executing if function 
//whatever you want to add 
} 
# 

अंत में एक # जोड़ने कर्ली कोष्ठक नीचे सभी खाली लाइनों अपने पतन को अपने संपादक से बचाता है। यह कोड को आगे बढ़ाने में मदद करता है।

4

एक परियोजना में मैं पर काम कर रहा हूँ, मैं बयान-समूहों का उपयोग संरचना से संकेत मिलता है - मेरे मामले में, नोड्स के बीच माता पिता/बच्चे रिश्तों एक रूटर में बनाता है:

$router = new Router(); 

$admin = $router->route('admin'); 
{ 
    $upload = $admin->route('upload')->post('upload'); 

    $menu = $admin->route('menu'); 
    { 
     $menu->route('load')->get('load'); 
     $menu->route('save')->get('save'); 
    } 
} 

`` `

आंतरिक रूप से, इस तरह एक सौपानिक संरचना बनाता है:

/admin 
    /upload 
    /menu 
    /load 
    /save 

इस उदाहरण में route() कॉलिंग एक बच्चे पैदा करता है - तो कोड एक मॉडल (रूटर के अंदर) बनाता है जो एक वृक्ष संरचना है, लेकिन कोड की संरचना उस प्रतिबिंबित नहीं करता है।

मैं घुंघराले ब्रेसिज़ यहाँ उपयोग कर रहा हूँ कोड पठनीय बनाने के लिए, के बाद से घुंघराले ब्रेसिज़ और खरोज के बिना कोड को पढ़ने के लिए काफी मुश्किल होगा:

इस मामले में
$router = new Router(); 

$admin = $router->route('admin'); 
$upload = $admin->route('upload')->post('upload'); 
$menu = $admin->route('menu'); 
$menu->route('load')->get('load'); 
$menu->route('save')->get('save'); 

इंडेंटेशन वास्तव में स्पष्ट किया क्या हो रहा है, मुझे लगता है ।

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

  • कोई संबंधित समस्या नहीं^_^