PHP

2008-10-23 3 views
19

के लिए __destruct दृश्यता __destruct() फ़ंक्शन के लिए "दृश्यता" सार्वजनिक हो या कुछ और हो? मैं अपने समूह के लिए एक मानक दस्तावेज़ लिखने की कोशिश कर रहा हूं और यह सवाल उठ गया।PHP

उत्तर

23

मार्क Biek के जवाब के अलावा:

__destruct() फ़ंक्शन घोषित किया जाना चाहिए जनता। अन्यथा, समारोह स्क्रिप्ट शटडाउन होने पर निष्पादित नहीं किया जाएगा:

Warning: Call to protected MyChild1::__destruct() from context '' during shutdown ignored in Unknown on line 0 
Warning: Call to private MyChild2::__destruct() from context '' during shutdown ignored in Unknown on line 0 

यह हानिकारक है, बल्कि अशुद्ध नहीं हो सकता।

लेकिन इस बारे में सबसे महत्वपूर्ण बात यह: नाशक निजी घोषित या सुरक्षित है, तो क्रम पल कचरा कलेक्टर मुक्त वस्तुओं की कोशिश करता है में एक गंभीर त्रुटि फेंक देगा:

<?php 
class MyParent 
{ 
    private function __destruct() 
    { 
     echo 'Parent::__destruct'; 
    } 
} 

class MyChild extends MyParent 
{ 
    private function __destruct() 
    { 
     echo 'Child::__destruct'; 
     parent::__destruct(); 
    } 
} 

$myChild = new MyChild(); 
$myChild = null; 
$myChild = new MyChild(); 

?> 

आउटपुट

Fatal error: Call to private MyChild::__destruct() from context '' in D:\www\scratchbook\destruct.php on line 20 

(उत्कृष्ट उदाहरण के लिए मार्क बीएके को धन्यवाद!)

+0

यह मेरे उत्तर से एक अच्छा मांसपेशियों है। आपके लिए +1 :) –

8

मुझे लगता है कि इस मामले में सार्वजनिक होने की आवश्यकता होगी जहां उप-वर्ग को __destruct अभिभावक वर्ग की विधि को स्पष्ट रूप से कॉल करने की आवश्यकता है।

कुछ इस तरह एक त्रुटि फेंक होगा:

<?php 
class MyParent 
{ 
    private function __destruct() 
    { 
     echo 'Parent::__destruct'; 
    } 
} 

class MyChild extends MyParent 
{ 
    function __destruct() 
    { 
     echo 'Child::__destruct'; 
     parent::__destruct(); 
    } 
} 

$myChild = new MyChild(); 
?> 
संबंधित मुद्दे

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