2010-12-05 6 views
26

इन ऑब्जेक्ट कॉलिंग के बीच क्या अंतर है?PHP: स्टेटिक और गैर स्टेटिक फ़ंक्शन और ऑब्जेक्ट्स

गैर स्थैतिक:

$var = new Object; 
$var->function(); 

स्थैतिक:

$var = User::function(); 

और यह भी एक कारण है कि मैं class कार्यों के लिए स्थिर संपत्ति का उपयोग करना चाहिए अंदर?

उदाहरण:

static public function doSomething(){ 
    ...code... 
} 
+7

-1 यह मेरे लिए प्रतीत होता है कि आपके पिछले कुछ सवाल बुनियादी भाषा सुविधाओं के बारे में थे। मैं सुझाव है कि आप पहले पीएचपी मैनुअल या किसी किताब को पढ़ने। बार बार बुनियादी वाक्यविन्यास स्पष्टीकरण के लिए पूछ बेमतलब है – mario

+19

@ मारियो। थोड़ा कठोर। शायद सर्क ने मैनुअल पढ़ा और अवधारणा को समझ में नहीं आया। कुछ इनपुट के लिए साथी प्रोग्रामर से पूछने के लिए उचित लगता है। – Ben

+1

@ बेन। शायद बहुत कठोर। लेकिन मैं डाउनवोट नहीं करना चाहता था टिप्पणी के बिना या सिर्फ एक * आरटीएफएम * लिंक। और मेरा अनुमान है कि वह वास्तव में इसके बारे में कुछ पढ़ा था फिर, लेकिन यहां "दूसरी राय" के लिए कहा। जो अधिक ठीक होगा, अगर उसने केवल इतना कहा था। – mario

उत्तर

33

परिभाषा के अनुसार स्थिर कार्य, वर्ग के किसी भी उदाहरण गुणों पर निर्भर नहीं हो सकते हैं और नहीं कर सकते हैं। यही है, उन्हें निष्पादित करने के लिए कक्षा के एक उदाहरण की आवश्यकता नहीं है (और इसलिए इसे निष्पादित किया जा सकता है जैसा आपने पहले उदाहरण के बिना दिखाया है)। कुछ अर्थों में, इसका मतलब है कि समारोह (और कभी भी इसकी आवश्यकता नहीं होगी) वर्ग के सदस्यों या विधियों (सार्वजनिक या निजी) पर निर्भर करता है।

+3

एक अलग function.php फ़ाइल के बजाय, कक्षा के अंदर स्थिर कार्यों को रखने का क्या मतलब है? – billmalarky

+8

@billmalarky यह आवश्यक नहीं है लेकिन यह कम से कम आपके कार्यों को उस फाइल में व्यवस्थित करने में आपकी सहायता करता है जहां वे प्रासंगिक हैं। ' बजाय ' समारोह :: someUserFunction; ' और निश्चित रूप से की तुलना में बेहतर' someFunction(); मेरे लिए, यह 'उपयोगकर्ता :: someFunction() के रूप में एक समारोह में इस तरह के संबंध के लिए आसान और अधिक तार्किक है' – AL2

7

स्टेटिक तरीकों और सदस्यों को एक वर्ग के उदाहरण के लिए वर्ग ही है और नहीं के हैं।

7

स्थिर कार्य या फ़ील्ड प्रारंभिकरण पर भरोसा नहीं करते हैं; इसलिए, स्थैतिक।

7

अंतर परिवर्तनीय दायरे में है। कल्पना कीजिए कि आप है:

class Student{ 
    public $age; 
    static $generation = 2006; 

    public function readPublic(){ 
     return $this->age; 
    } 

    public static function readStatic(){ 
     return $this->age;   // case 1 
     return $student1->age; // case 2 
     return self::$generation; // case 3 

    } 
} 

$student1 = new Student(); 
Student::readStatic(); 
  1. आप स्थिर समारोह क्या $ इस क्योंकि यह स्थिर है पता नहीं कर सकते हैं। यदि यह $ $ हो सकता है, तो यह $ छात्र 1 होगा और विद्यार्थी नहीं।

  2. यह भी नहीं जानता कि $ student1 क्या है।

  3. यह 3 मामले के लिए काम करता है क्योंकि यह कक्षा के अंतर्गत है, जो पिछले 2 के विपरीत है, जो वस्तुओं को संबंधित है जिन्हें तत्काल होना है।

0

स्टेटिक कार्यों के संबंध में प्रश्न वापस आते रहते हैं।

परिभाषा के अनुसार स्थिर कार्य, कक्षा के किसी भी उदाहरण गुणों पर निर्भर नहीं हो सकते हैं और नहीं कर सकते हैं। यही है, उन्हें निष्पादित करने के लिए कक्षा के एक उदाहरण की आवश्यकता नहीं है (और इसलिए निष्पादित किया जा सकता है। कुछ अर्थों में, इसका मतलब है कि फ़ंक्शन (या कभी भी इसकी आवश्यकता नहीं होगी) सदस्यों या विधियों (सार्वजनिक या निजी) पर निर्भर करता है) वर्ग के।

class Example { 

    // property declaration 
    public $value = "The text in the property"; 

    // method declaration 
    public function displayValue() { 
     echo $this->value; 
    } 

    static function displayText() { 
     echo "The text from the static function"; 
    } 
} 


$instance = new Example(); 
$instance->displayValue(); 

$instance->displayText(); 

// Example::displayValue();   // Direct call to a non static function not allowed 

Example::displayText();