2009-09-23 9 views
9
में एक और वर्ग के भीतर एक वर्ग कॉल

अरे वहाँ मैं यह कैसे किया जाता के रूप में जब मैं एक वर्ग के एक समारोह के अंदर निम्नलिखित कोड की कोशिश यह कुछ php त्रुटि जो मैं नहीं पकड़ सकते पैदा करता है सोच रहा हूँपीएचपी

public $tasks; 
$this->tasks = new tasks($this); 
$this->tasks->test(); 

मैं नहीं जानता कि क्यों वर्ग की दीक्षा इस $ के रूप में एक पैरामीटर या तो की आवश्यकता है: एस

धन्यवाद

class admin 
{ 
    function validate() 
    { 
     if(!$_SESSION['level']==7){ 
      barMsg('YOU\'RE NOT ADMIN', 0); 
      return FALSE; 
     }else{ 
      **public $tasks;** // The line causing the problem 
      $this->tasks = new tasks(); // Get rid of $this-> 
      $this->tasks->test(); // Get rid of $this-> 
      $this->showPanel(); 
     } 
    } 
} 
class tasks 
{ 
    function test() 
    { 
     echo 'test'; 
    } 
} 
$admin = new admin(); 
$admin->validate(); 
+0

वहां 'सार्वजनिक $ कार्य' क्या है? – brianreavis

+0

मैंने सोचा था कि इसे किसी अन्य वर्ग का ऑब्जेक्ट बनाना आवश्यक था, जो वैरिएबल में सार्वजनिक होने के भीतर निहित है लेकिन मुझे नहीं पता। – Supernovah

उत्तर

22

आप अपने वर्ग की विधि (समारोह के अंदर सार्वजनिक $ कार्यों की घोषणा नहीं कर सकते हैं।) यदि आपको इसकी आवश्यकता नहीं है का उपयोग कार्य विधि के बाहर आपत्ति, तो आप सिर्फ कर सकते हैं:

$tasks = new Tasks($this); 
$tasks->test(); 

आप केवल "$ this->" का उपयोग करने की जरूरत है अपने एक चर है कि आप वर्ग भर में उपलब्ध होने के लिए चाहते का उपयोग करते समय।

आपका दो विकल्प:

class Foo 
{ 
    public $tasks; 

    function doStuff() 
    { 
     $this->tasks = new Tasks(); 
     $this->tasks->test(); 
    } 

    function doSomethingElse() 
    { 
     // you'd have to check that the method above ran and instantiated this 
     // and that $this->tasks is a tasks object 
     $this->tasks->blah(); 
    } 

} 

या

class Foo 
{ 
    function doStuff() 
    { 
     $tasks = new tasks(); 
     $tasks->test(); 
    } 
} 

अपने कोड के साथ:

class Admin 
{ 
    function validate() 
    { 
     // added this so it will execute 
     $_SESSION['level'] = 7; 

     if (! $_SESSION['level'] == 7) { 
      // barMsg('YOU\'RE NOT ADMIN', 0); 
      return FALSE; 
     } else { 
      $tasks = new Tasks(); 
      $tasks->test(); 
      $this->showPanel(); 
     } 
    } 

    function showPanel() 
    { 
     // added this for test 
    } 
} 
class Tasks 
{ 
    function test() 
    { 
     echo 'test'; 
    } 
} 
$admin = new Admin(); 
$admin->validate(); 
+0

यह काम नहीं किया। मैंने अपने प्रश्न – Supernovah

+0

की एक और वर्बोज़ प्रतिलिपि के साथ अपना प्रश्न अभी अपडेट किया है जो आपने अभी किया है :) – Supernovah

+0

धन्यवाद लांस, सोमवार और शुक्रवार को सबसे सरल चीजें भुला दी जाती हैं, अनुस्मारक के लिए धन्यवाद ;-) – ChrisH

4

तुम हो समस्या कोड की इस पंक्ति के साथ है:

public $tasks; 
$this->tasks = new tasks(); 
$this->tasks->test(); 
$this->showPanel(); 

public कीवर्ड वर्ग की परिभाषा में नहीं है, कक्षा की विधि में नहीं। PHP में, आपको कक्षा में सदस्य चर घोषित करने की भी आवश्यकता नहीं है, आप केवल $this->tasks=new tasks() कर सकते हैं और यह आपके लिए जोड़ा जाता है।