मैं वर्तमान में प्रोपेल ORM उपयोग करने के लिए सीख रहा हूँ, और मैं दो थोड़ा अलग प्रश्नों के लिए एक शर्तों को पूरा करते पुन: उपयोग करना चाहते हैं:हमें एक नए चर के लिए क्लोन क्यों आवंटित करना चाहिए?
$criteria = ArticleQuery::create()
->filterByIsPublished(true)
->orderByPublishFrom(Criteria::DESC)
->joinWith('Article.Author')
->keepQuery();
$this->news = $criteria
->filterByType('news')
->find();
$this->articles = $critera
->filterByType('article')
->find();
हालांकि, इस अपेक्षा के अनुरूप काम नहीं होगा, क्योंकि अब लेख के लिए क्वेरी की कोशिश करेंगे उन प्रविष्टियों को ढूंढने के लिए जहां प्रकार 'समाचार' और 'लेख' दोनों है, जो निश्चित रूप से असंभव है।
तो हम इस वस्तु का क्लोन प्राप्त करने की आवश्यकता है, और क्या सहज ज्ञान युक्त करने के लिए मुझे बस paranthesis अंदर क्लोन कीवर्ड जोड़ने के लिए था लग रहा था:
$this->news = (clone $criteria)
->filterByType('news')
->find();
Parse error: syntax error, unexpected T_OBJECT_OPERATOR
इसके बजाय हम निर्दिष्ट करने के लिए है एक चर इससे पहले कि हम इसका इस्तेमाल कर सकते हैं:
$clonedCritera = clone $criteria;
$this->news = $clonedCriteria
->filterByType('news')
->find();
आप new
ऑपरेटर के साथ समान व्यवहार किया है। मैं देखता हूं कि प्रोपेल डेवलपर्स ने इस सीमा को प्रतिस्थापित करके इस सीमा को घुमाया है:
new ArticleQuery()->doOperations()
ArticleQuery::create()->doOperations()
के साथ।
PHP भाषा डिजाइनर इस तरह से ऐसा क्यों चुनते हैं? यदि आप सीधे इन अभिव्यक्तियों के परिणाम का उपयोग कर सकते हैं, तो यह कोड को अधिक धाराप्रवाह बना देगा और कुछ मामलों में, पढ़ने में आसान होगा।
एचआरएम। मुझे आश्चर्य है कि मेरे कौन से प्रतिक्रिया कम से कम अनुचित होंगे ... –
क्यों? वास्तव में वास्तव में एक अच्छा सवाल है। "क्योंकि php जावा नहीं है" मुझे जवाब मिला, जब मैंने कुछ नए फोरम मुद्दे को "नया" के बारे में पूछा। मेरी राय में php पार्सर में ऐसी कई त्रुटियां हैं - हम केवल उम्मीद कर सकते हैं कि उन्हें भविष्य में किसी दिन तय किया जाएगा ... – aurora
@harald मैं इस शोध के दौरान इस आरएफसी पेज पर आया, इसलिए ऐसा लगता है कि विधि उदाहरण कॉल कम से कम है PHP डेवलपर्स के बीच चर्चा के तहत। https://wiki.php.net/rfc/instance-method-call – CheeseSucker