2015-05-27 7 views
6

Ho fatto delle ricerche sugli oggetti in PHP. Tutti gli esempi che ho visto usano il costruttore di oggetti anche sui propri oggetti. PHP ti obbliga a farlo e se sì perché?Fa/Perché php ti costringe a usare il costruttore di oggetti

Ad esempio:

<?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(); 
    ?> 

Ma se faccio questo:

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

ottengo un codice di errore HTTP 500 (vale a dire: Il mio codice è caduto).

risposta

3

Si sta associando erroneamente la funzione __construct() al modo in cui si crea un'istanza di una classe/oggetto.

Non si per utilizzare la funzione __construct() (è facoltativo). Tuttavia, prima di poter utilizzare i metodi di una classe, è necessario creare per prima cosa.

<?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

Perché una definizione di classe è esattamente quella, una definizione.

Per creare un'istanza di una classe (un oggetto reale), è necessario creare un'istanza. Si può infatti istanziare molti oggetti/istanze della stessa classe.

E non c'è bisogno di definire un metodo di costruzione ..... ma dovete creare un'istanza utilizzando new

2

Ci sono due modi per lavorare con le variabili di classe. 1. la variabile deve essere statico pubblico come:

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

2. l'accesso alla variabile tramite l'oggetto classe

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

proposito, PHP può creare l'oggetto da solo php almeno 5,5 . Il tuo codice non si arresta in modo anomalo. Fornisce un avvertimento: Avviso: creazione dell'oggetto predefinito da un valore vuoto in ...

Quindi, perché? Ecco come PHP lavora con la memoria. In un primo caso lo statico significa che php ha già allocato memoria per la variabile e si può lavorare con esso. Il secondo caso Usando il comando NEW date istruzioni a php per allocare memoria e caricare la classe in esso. Quindi, dopo che la classe è stata creata, hai accesso al var.

In un terzo caso PHP chiama persona nuova da solo e fornisce l'avviso. Consiglio vivamente di non contare sul comportamento predefinito di php. Crea SEMPRE un oggetto in modo esplicito

Problemi correlati