2010-05-02 10 views
10

से क्लास कॉल की आवश्यकता होती है, कॉलिंग php फ़ाइल में चिपकने वाले कोड की आवश्यकता होती है।php को मेरी समझ से अंदरूनी विधि

क्या होगा यदि आपको किसी विधि के अंदर से आवश्यकता हो रही है ... यह विधि में अगले कथन को अवरुद्ध करने, विधि के अंदर संपूर्ण कोड/कक्षा पेस्ट करेगा।

उदाहरण के लिए।

function test() { 

    require 'pathtosomeclasscode'; 
    somestatement; // any code after the require is blocked. 

} 

मैं इस जगह को कैसे प्राप्त कर सकता हूं, जहां कभी भी उस सटीक स्थान पर चिपकाए बिना कोड की आवश्यकता हो सकती है?

+0

यह अगले कथन को क्यों अवरुद्ध करेगा? – zneak

+0

यह सभी कोड आकार से बाहर रखेगा, उदाहरण के लिए। वर्ग –

+1

@ जेरा के अंदर चिपकाया जा रहा है: ऐसा नहीं होता है। मैंने यह मेरे जवाब में कहा है, लेकिन मैं इसे यहां मजबूत कर दूंगा: क्या कोई त्रुटि/ख़राबता है जिसे आप अनुभव कर रहे हैं जिससे आप इस मामले पर विश्वास कर सकते हैं? यदि ऐसा है, तो कृपया हमें अधिक जानकारी प्रदान करें ताकि हम समस्या के स्रोत को सुधार सकें। – icio

उत्तर

17

कुछ हद तक आश्चर्यजनक रूप से, यह ठीक काम करने लगता है। शामिल कोड Baz :: bork() के दायरे में निष्पादित होगा - लेकिन कोड बस कक्षा को परिभाषित करता है, और कक्षाएं वैश्विक हैं। तो आप एक परिभाषित वर्ग के साथ खत्म हो जाते हैं।

फ़ाइल: Foo.php:

<?PHP 
class Foo{ 
     function bar(){ 
       echo "Hello from Foo::bar()!\n"; 
     } 
} 

फ़ाइल: Baz.php:

<?PHP 
class Baz{ 

     function bork(){ 
       require_once "Foo.php"; 
       $f = new Foo(); 
      $f->bar(); 
     } 
} 

echo "testing internal definition:\n"; 
$b = new Baz(); 
$b->bork(); 

echo "\ntesting in global scope:\n"; 

$f = new Foo(); 
$f->bar(); 
echo "\nall done\n"; 

आउटपुट:

$ php Baz.php 
testing internal definition: 
Hello from Foo::bar()! 

testing in global scope: 
Hello from Foo::bar()! 

all done 

अब, मैं कई स्थानों पर जहां सोच भी नहीं सकते आप इस तरह से चीजें करना चाहते हैं। लोग आमतौर पर वर्ग परिभाषा के बाहर, अपनी कक्षा फ़ाइल के शीर्ष पर किसी भी संभावित निर्भरता की आवश्यकता होती है।

+0

यह आवश्यक हो सकता है जब आवश्यक फ़ाइल परिवर्तनीय हो: 'requ_once $ dirName। "/../{$ fileName} .php"; ' –

+0

क्या होगा यदि फ़ाइल नामस्थान निर्दिष्ट करती है, तो क्या यह सही तरीके से संभाल जाएगी? हाँ, यह काम किया। – SiXoS

+0

@ जेम्ससोलसन यह कोड की सशर्त/देरी लोडिंग के लिए भी उपयोगी है। उदाहरण के लिए। एक वर्डप्रेस प्लगइन में कोड हो सकता है जिसका उपयोग केवल फ्रंटेंड/बैकएंड/एजेक्स कॉल/विशिष्ट पेज इत्यादि पर किया जाता है। प्लगइन लोड होने से पहले यह ज्ञात होता है कि आप किस पेज/पोस्ट पर हैं, आपको लोडिंग में देरी करने की आवश्यकता है जो wp में क्रियाओं के साथ किया जाता है, जो हां, एक फ़ंक्शन कॉल करेगा ... यह सर्वर की तरफ चीजों को गति दे सकता है, लेकिन अनावश्यक शैलियों और स्क्रिप्ट को अनावश्यक अनुरोधों को कम करने से भी बच सकता है ... – nus

1

आवश्यकताएँ_ऑनसे कोशिश करें? बस इसे कहीं और शामिल करें।

0

यदि आप include_once ('script.php') का उपयोग करते हैं तो आप कक्षाओं के पुनर्वितरण के बारे में त्रुटियों में नहीं भागेंगे।

मैं प्रयास नहीं किया है अपने आप निम्नलिखित है, लेकिन मैं) यदि आप नहीं करते include_once करने के लिए (चाहते हैं इस स्थापना भी काम हो सकता है सोच रहा हूँ प्रचुरता से:

class Whatever { 

    protected $classObject; 
    public function __construct(/*...*/) { 
     include('anotherClass.php'); 
     $this->classObject = new anotherClass(); 
    } 

    public function someFunction(/*...*/) { 
     $this->classObject->classObjectFunction(); 
    } 

    public function anotherFunction(/*...*/) { 
     $this->classObject->classObjectFunction(); 
    } 
} 

फिर आप निम्नलिखित कोड कह सकते हैं जो

$Whatever = new Whatever(); 
$Whatever->someFunction(); 
$Whatever->anotherFunction(); 
5

कॉलिंग require, require_once, include या include_onceनहीं होगा बंद: प्रत्येक एक ही साझा वर्ग वस्तु में एक समारोह कहेंगे आपके फ़ंक्शन के भीतर कोड का निष्पादन जब तक कि स्क्रिप्ट में कोई समस्या न हो। शामिल फ़ाइल के भीतर कोड उसी स्कोप में फ़ंक्शन (परिभाषित कार्यों और कक्षाओं के वैश्विक होने के साथ) में निष्पादित किया गया है, इसमें डाला नहीं गया है, और वहां और क्या है।

अन्य उत्तर एक समाधान के रूप require के लिए विकल्प में से एक का उपयोग करें - ये समाधान आप के लिए काम कर सकते हैं कि क्या आपकी स्क्रिप्ट में त्रुटि के नामकरण में एक संघर्ष के साथ क्या करना है (यानी एक वर्ग या समारोह को पुनर्परिभाषित करने का एक प्रयास) , अन्यथा आप हमें यह सोचने के लिए क्या हुआ है (या नहीं हुआ) के बारे में अधिक जानकारी देना चाहते हैं कि कोई समस्या है ताकि हम वास्तविक कारण को हल करने में आपकी सहायता कर सकें।

एक और नोट पर, इन फ़ाइल समावेशन विधियों को आपकी स्क्रिप्ट में पेस्ट कोड नहीं है। चिपकाने वाला एक ऐसा टूल है जो लोग टेक्स्ट को बनाए रखने के लिए उपयोग करते हैं। मेरा सुझाव है कि आप PHP मैनुअल पढ़ने कोशिश करते हैं और कैसे इन कार्यों काम के प्रति आपकी समझ को आगे बढ़ाने के:

पोस्ट फिर अगर आप ' उन्हें देखने के बाद उनके काम पर और सवाल हैं।

0

मुझे लगता है कि आप क्या कह रहे हैं कि आप कोड को तुरंत निष्पादित नहीं करना चाहते हैं। यदि यह सही है, तो आपके पास कई विकल्प हैं:

  1. आप आवश्यकताएं बढ़ा सकते हैं।

  2. आप fopen() का उपयोग कर फ़ाइल भी पढ़ सकते हैं, फिर इसे पार्स कर सकते हैं। के रूप में मैं देख रहा हूँ, आप लोड हो रहा है वर्गों के लिए बाहरी फ़ाइलों का उपयोग कर रहे हैं (आप eval कॉल कर सकते हैं नहीं है क्योंकि यह एचटीएमएल समझ में नहीं होगा, लेकिन आप एक पार्सर के साथ यह कर सकते हैं)

0

, मैं सही हूँ? आप Autoloading Classes का उपयोग क्यों नहीं करते हैं। मुझे पता है कि यह काम नहीं करेगा जब आप अलग-अलग परिस्थितियों में विभिन्न वर्ग निकायों को लोड करना चाहते हैं, लेकिन मुझे नहीं पता कि यह एक अच्छा अभ्यास है या नहीं।

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