दिलचस्प पोस्ट
HTML इनपुट – नाम बनाम आईडी शेल स्क्रिप्ट से जांचना यदि कोई निर्देशिका फ़ाइलें शामिल है सी काम में फंक्शन पॉइंटर्स कैसे करते हैं? सीएसएस में 'होवर' का उपयोग कैसे करें Json फ़ाइल में एक मान को अपडेट कैसे करें और इसे नोड.जेएस के माध्यम से सहेजें एक .NET ऑब्जेक्ट की स्मृति ओवरहेड क्या है पांडा डेटाफ़्रेम: एक कॉलम में तारों से अवांछित भागों को हटा दें Ssh से लॉग आउट करने के बाद प्रोग्राम को कैसे चलाना जारी रखना है? eof () बुरा अभ्यास? क्या मैं एक बैट फ़ाइल में एक इनपुट पाठ को मुखौटा कर सकता हूं? क्या कोणीय जेएस निर्देश के लिए एक पोस्ट रेंडर कॉलबैक है? @ViewScoped कॉल्स @ PostConstruct प्रत्येक पोस्टबैक अनुरोध पर विभाजित स्क्रीन emacs windows का आकार कैसे बदल सकता है? कैनवास तत्व में मैं एक सरल onClick ईवेंट हैंडलर कैसे जोड़ूं? पायथन में ओएससिस्टम () का रिटर्न वैल्यू क्या है?

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

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

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

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

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

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

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

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

 public $var = 4+1; 

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

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

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

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

वेब के समाधान से एकत्रित समाधान "साधारण अभिव्यक्ति के साथ 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 में लगातार स्केलर अभिव्यक्ति का समर्थन करेगा: