दिलचस्प पोस्ट
कैसे जावा में सिंक्रनाइज़ काम करता है मोबाइल ब्राउज़र के माध्यम से IMEI नंबर / सिम नंबर / मोबाइल नंबर को पुनर्प्राप्त करें HTTP प्रोटोकॉल में कुकीज़ कैसे पारित की जाती हैं? संकेत 11 SIGSEGV दुर्घटना Android इवेंटहान्डलर को पास पैरामीटर ग्लोथो () का उपयोग समझाएं? गाढ़ा दूरी मैट्रिक्स कैसे काम करता है? (pdist) क्या सी ++ में चर लंबाई सरणी हैं? घातक त्रुटि: संदेश के साथ अनचाहे अपवाद 'mysqli_sql_exception' 'प्रश्न / तैयार कथन में उपयोग नहीं सूचक' एडीए में द्विघात समीकरण LINQ का उपयोग करके एक सूची <स्ट्रिंग> के अंदर सभी स्ट्रिंग्स को सचेत करें ईएस 6 जेननर बनाम रेडक्स-थैंक ईएस2017 async के साथ / प्रतीक्षा के साथ redux-saga का उपयोग करने के पेशेवरों / विचार रनटाइम पर कस्टम फ़ाइल में प्रवेश करने के लिए log4j कॉन्फ़िगर करें बिग-ओह बनाम बिग-थेटा एक iframe की सामग्री लोड करने में विफलता का पता लगाएं

साधारण अभिव्यक्ति के साथ PHP वर्ग गुण घोषणाओं को आरंभ करने से वाक्यविन्यास त्रुटि उत्पन्न होती है

PHP डॉक्स के अनुसार, निम्नलिखित प्रतिबंधों के साथ कक्षा में गुणों को शुरू कर सकते हैं:

"इस घोषणापत्र में एक आरम्भिकरण शामिल हो सकता है, लेकिन यह आरंभीकरण एक निरंतर मूल्य होना चाहिए – यानी, इसे समय के संकलन में मूल्यांकन करने में सक्षम होना चाहिए और मूल्यांकित होने के लिए रन-टाइम जानकारी पर निर्भर नहीं होना चाहिए।"

मैं एक सरणी को इनिशियलाइज़ करने की कोशिश कर रहा हूं और कुछ समस्याएं आ रही हूं। जबकि यह ठीक काम करता है:

public $var = array( 1 => 4, 2 => 5, ); 

यह एक वाक्य रचना त्रुटि बनाता है:

 public $var = array( 1 => 4, 2 => (4+1), ); 

यहां तक ​​कि यह स्वीकार नहीं किया गया है:

 public $var = 4+1; 

जो बताता है कि यह सरणी () भाषा के निर्माण की एक सीमा नहीं है।

अब, पिछली बार मैंने जांच की, "4 + 1" एक स्थिर मूल्य के बराबर है जिसे न केवल स्वीकार किया जाना चाहिए, लेकिन वास्तव में इसे अनुकूलित किया जाना चाहिए किसी भी मामले में, यह निश्चित रूप से संकलन-समय पर मूल्यांकन करने में सक्षम है।

तो यहाँ क्या हो रहा है? क्या सीमा वास्तव में "किसी भी गणना की अभिव्यक्ति बिल्कुल नहीं हो सकती है", किसी भी अभिव्यक्ति "संकलन समय पर मूल्यांकन करने में सक्षम" की तर्ज पर है? डॉक्टर की भाषा में "मूल्यांकन" के प्रयोग से पता चलता है कि सरल गणना की अनुमति है, लेकिन अफसोस ….

यदि यह PHP में एक बग है, तो क्या कोई भी बग आईडी है? मैंने एक खोजने की कोशिश की, लेकिन कोई भाग्य नहीं था।

Solutions Collecting From Web of "साधारण अभिव्यक्ति के साथ PHP वर्ग गुण घोषणाओं को आरंभ करने से वाक्यविन्यास त्रुटि उत्पन्न होती है"

PHP संकलन-समय पर ऐसे संचालन नहीं करता है; आप स्थिर मानों को स्थिरांक तक नहीं आवंटित कर सकते हैं, भले ही सभी ऑपरेटरों स्वयं स्थिर हो जाएं कक्षा सदस्यों के मूलभूत मूल्यों को उसी तरह से व्यवहार किया जाता है मुझे इस व्यवहार का सामना करना पड़ा क्योंकि मैंने दो की शक्तियों को स्थिर करने की कोशिश की:

 class User { const IS_ADMIN = 1; const IS_MODERATOR1 = 1 << 1; // Won't work const IS_MODERATOR2 = 0x02; // works } 

यह सीमा अब PHP 5.6 के रूप में मौजूद नहीं है

नई सुविधा जो पहले से अस्वीकृत सिंटैक्स को सक्षम करती है उसे निरंतर स्केलर अभिव्यक्ति कहा जाता है :

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

 class C { const THREE = TWO + 1; const ONE_THIRD = ONE / self::THREE; const SENTENCE = 'The value of THREE is '.self::THREE; public function f($a = ONE + self::THREE) { return $a; } } echo (new C)->f()."\n"; echo C::SENTENCE; ?> 

उपरोक्त उदाहरण उत्पादन होगा:

 4 The value of THREE is 3 

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

लेकिन, आप सही कह रहे हैं, मैन्युअल से यह उद्धरण "मूल्यांकन" कहता है शायद आपको एक दस्तावेज टिकट खोलना चाहिए।


मार्च 2014 को संपादित करें

ऐसा लगता है कि php अब PHP 5.6 में लगातार स्केलर अभिव्यक्ति का समर्थन करेगा: