2015-05-27 7 views
6

का उपयोग करने के लिए मजबूर करता है मैं PHP में ऑब्जेक्ट्स पर कुछ शोध कर रहा हूं। मेरे द्वारा देखे गए सभी उदाहरण ऑब्जेक्ट कन्स्ट्रक्टर का उपयोग अपनी ऑब्जेक्ट्स पर भी करते हैं। क्या PHP आपको ऐसा करने के लिए मजबूर करता है और यदि ऐसा है तो क्यों?क्या/php आपको ऑब्जेक्ट कन्स्ट्रक्टर

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

<?php 
    class Person { 
    public $isAlive = true; 
    public $firstname; 
    public $lastname; 
    public $age; 

    public function __construct($firstname, $lastname, $age) { 
     $this->firstname = $firstname; 
     $this->lastname = $lastname; 
     $this->age = $age; 
    } 

    public function greet() { 
     return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)"; 
     } 
    } 

    // Creating a new person called "boring 12345", who is 12345 years old ;-) 
    $me = new Person('boring', '12345', 12345); 

    echo $me->greet(); 
    ?> 

लेकिन अगर मैं ऐसा करते हैं:

<?php 
class Person { 
    public $isAlive = true; 
    public $firstname; 
    public $lastname; 
    public $age; 
} 
$person->firstname = "John"; 
echo $person->firstname; 
?> 

मैं एक HTTP त्रुटि कोड 500 मिलता है (यानी: मेरी कोड दुर्घटनाग्रस्त हो गया)।

उत्तर

3

आप __construct() फ़ंक्शन को गलत तरीके से संबद्ध कर रहे हैं जिस तरीके से आप कक्षा/ऑब्जेक्ट को तत्काल बनाते हैं।

फ़ंक्शन (यह वैकल्पिक है) का उपयोग करने के लिए नहीं है। हालांकि, इससे पहले कि आप कक्षा के तरीकों का उपयोग कर सकें, आप को पहले इसका उदाहरण बनाना होगा।

<?php 
class Person { 
    public $isAlive = true; 
    public $firstname; 
    public $lastname; 
    public $age; 
} 
$person = new Person(); //Add this line 
$person->firstname = "John"; 
echo $person->firstname; 
?> 
3

क्योंकि कक्षा परिभाषा बिल्कुल एक परिभाषा है।

कक्षा (एक वास्तविक वस्तु) का उदाहरण बनाने के लिए, आपको इसे तुरंत चालू करना होगा। आप वास्तव में एक ही कक्षा के कई अलग-अलग वस्तुओं/उदाहरणों को तुरंत शुरू कर सकते हैं।

और आप एक निर्माता विधि को परिभाषित करने की जरूरत नहीं है ..... लेकिन आप उपयोग कर new

2

कक्षा में शामिल चर के साथ काम करने के लिए दो तरीके हैं दृष्टांत की क्या ज़रूरत है। सार्वजनिक स्थिर 1. चर होना चाहिए की तरह:

class Person { 
    public $isAlive = true; 
    public static $firstname; 
    public $lastname; 
    public $age; 
} 
Person::$firstname = "John"; 
echo Person::$firstname; 

2. चर के लिए उपयोग वर्ग वस्तु

class Person { 
    public $isAlive = true; 
    public $firstname; 
    public $lastname; 
    public $age; 
} 
$person->firstname = "John"; 
echo $person->firstname; 

के माध्यम से वैसे, पीएचपी, कम से कम अपने आप में वस्तु php 5.5 बना सकते हैं । आपका कोड क्रैश नहीं हो रहा है। यह सिर्फ चेतावनी देता है: चेतावनी: खाली मूल्य से डिफ़ॉल्ट ऑब्जेक्ट बनाना ...

तो क्यों? इस प्रकार PHP स्मृति के साथ काम कर रहा है। पहले मामले में स्थिर का अर्थ है कि php पहले से ही चर के लिए स्मृति आवंटित है और आप इसके साथ काम कर सकते हैं। दूसरा मामला नई कमांड का उपयोग करके आप स्मृति आवंटित करने और कक्षा में लोड करने के लिए PHP को निर्देश देते हैं। इसलिए, कक्षा के निर्माण के बाद आपके पास var तक पहुंच है।

एक तीसरे मामले में PHP नए व्यक्ति को स्वयं ही कॉल कर रहा है और आपको चेतावनी देता है। मैं दृढ़ता से PHP डिफ़ॉल्ट व्यवहार पर गिनने की अनुशंसा नहीं करता हूं। हमेशा एक वस्तु को स्पष्ट तरीके से बनाएं

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