स्ट्रिंग के बजाय निरंतर :: कक्षा मेरे क्लाइंट में से किसी एक के कोडबेस में मुझे एक योग्य वर्ग नाम के लिए एक स्ट्रिंग के रूप में बहुत सारे संदर्भ दिखाई देते हैं;PHP कोड्सनिफर कस्टम नियम:
[
'foobar' => 'My\Namespace\Class'
]
उपयोग करने के बजाय
:
[
'foobar' => My\Namespace\Class::class
]
हम इन तार को पकड़ने के लिए एक PHP CodeSniffer नियम जोड़ सकते हैं और एक चेतावनी जोड़ सकते हैं ताकि स्ट्रिंग :: वर्ग के लिए पुनर्संशोधित किया जा सकता है करना चाहते हैं कारणों में से एक जोड़ी के लिए लगातार। पहला भाग (स्ट्रिंग को पकड़ना) आसान है, लेकिन क्योंकि हम स्थिर कोड विश्लेषण कर रहे हैं, हम क्लास_एक्सिस्ट्स (उदाहरण के लिए) get_declared_classes() के परिणामों को देख नहीं सकते हैं।
अगला विकल्प स्ट्रिंग का विश्लेषण कर सकता है ([ए-ज़ा-जे 0-9]), लेकिन यह बहुत विश्वसनीय नहीं है क्योंकि बहुत से तार मेल खाते हैं लेकिन क्लासनाम नहीं हैं।
एक और विकल्प सभी वर्गनामों (T_CLASS टोकन पर आधारित) को 'एकत्रित' करना है और कक्षाओं की एकत्रित सूची के आधार पर उसके बाद सभी तारों का विश्लेषण करना है। IMHO को कार्यान्वित करना बहुत आसान नहीं है क्योंकि CodeSniffer प्रति-फ़ाइल आधार पर काम करता है।
अंतिम विकल्प जो मैं सोच सकता था वह भी काफी गंदा है; क्योंकि हम हमेशा हमारी परियोजनाओं में संगीतकार का उपयोग करते हैं, हम संगीतकार की ऑटोलोडिंग फाइलें ले सकते हैं और क्लासमैप और नेमस्पेस के खिलाफ मिलान करने का प्रयास कर सकते हैं। यह भी बहुत विश्वसनीय और साफ नहीं है।
कोई अन्य सुझाव वाला कोई भी व्यक्ति जिसके बारे में नहीं सोचा था ?!
मुझे बहुत अच्छा लगता है, आप कितने दूर गए? मैं आपकी मदद कर सकता हूं, क्योंकि यह मेरी समस्या सूची में है। –
क्षमा करें, अभी तक कोई प्रगति नहीं है। मैंने अभी तक जांच नहीं की है लेकिन मैं कल्पना कर सकता हूं कि PHPSTan जैसे स्थिर कोड विश्लेषण टूल पहले से ही ऐसा करने में सक्षम हैं। – Arjan
कोई समस्या नहीं है। इस मुद्दे पर देखने या सहयोग करने के लिए स्वतंत्र महसूस करें: https://github.com/Symplify/Symplify/issues/59 मैं इसे बनाने में आपकी सहायता कर सकता हूं। PHPStan केवल कोड का विश्लेषण करता है, कुछ भी नहीं बदलता है। –