2009-12-30 3 views
10

Come impostare una variabile pubblica. È corretto ?:Impostazione delle variabili di classe pubblica

class Testclass 
{ 
    public $testvar = "default value"; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); 
+3

Il tuo modo va bene – Greg

risposta

21

questo è il modo, ma vorrei suggerire di scrivere un getter e setter per quella variabile.

class Testclass 

{ 
    private $testvar = "default value"; 

    public function setTestvar($testvar) { 
     $this->testvar = $testvar; 
    } 
    public function getTestvar() { 
     return $this->testvar; 
    } 

    function dosomething() 
    { 
     echo $this->getTestvar(); 
    } 
} 

$Testclass = new Testclass(); 

$Testclass->setTestvar("another value"); 

$Testclass->dosomething(); 
+4

con setter e getter, dovresti impostare $ testvar a privato :) – nXqd

+0

oh sì, sarebbe più appropriato. Grazie per la segnalazione. – marvin

+1

Perché suggerisci questo? È ormai obsoleto o ancora un buon metodo? – tehlivi

0

All'interno class Testclass:

public function __construct($new_value) 
{ 
    $this->testvar = $new_value; 
} 
0

Stai "impostando" il valore di tale variabile/attributo. Non sovrascrivendolo o sovraccaricandolo. Il tuo codice è molto, molto comune e normale.

Tutti questi termini ("set", "override", "overload") hanno significati specifici. Override e Overload riguardano il polimorfismo (sottoclasse).

Da http://en.wikipedia.org/wiki/Object-oriented_programming:

polimorfismo permette al programmatore di trattare i membri della classe derivate proprio come i loro genitori membri della classe. Più precisamente, il polimorfismo nella programmazione orientata agli oggetti è la capacità di oggetti appartenenti a tipi di dati diversi di rispondere a chiamate di metodi con lo stesso nome, ciascuno secondo un comportamento specifico del tipo appropriato. Un metodo o un operatore come +, - o * possono essere applicati in modo astratto in molte situazioni differenti. Se a un cane viene comandato di parlare(), questo può provocare una corteccia(). Tuttavia, se a un maiale viene comandato di parlare(), questo può provocare un oink(). Entrambi ereditano speak() da Animal, ma i loro metodi di classe derivati ​​sovrascrivono i metodi della classe genitore; questo è un polimorfismo dominante. Sovraccarico Il polimorfismo è l'uso di una firma del metodo, o di un operatore come "+", per eseguire diverse funzioni a seconda dell'implementazione. L'operatore "+", ad esempio, può essere utilizzato per eseguire l'aggiunta di numeri interi, l'aggiunta float, la concatenazione di elenchi o la concatenazione di stringhe. Ci si aspetta che due sottoclassi di Number, come Integer e Double, si sommano correttamente in un linguaggio OOP. Il linguaggio deve quindi sovraccaricare l'operatore di addizione, "+", per funzionare in questo modo. Questo aiuta a migliorare la leggibilità del codice. Il modo in cui questo viene implementato varia da lingua a lingua, ma la maggior parte dei linguaggi OOP supporta almeno un certo livello di sovraccarico del polimorfismo.

+0

Sì ... stavo solo usando il termine sbagliato – Cudos

+0

sovraccarico e override e impostare tutti hanno significati specifici. Hai ricevuto una risposta che cercavi sul tuo codice? O stai specificamente cercando informazioni sul sovraccarico? –

+0

Hai appena visto la tua ultima modifica alla domanda. Lo stai facendo bene. Come altri hanno già detto, è possibile utilizzare i metodi get e set se lo si desidera, ma non è necessario. Hanno dei vantaggi, soprattutto se è necessario verificare che i dati siano di un certo tipo prima di impostarli. –

0

Per sovraccarico avresti bisogno di una sottoclasse:

class ChildTestclass extends Testclass { 
    public $testvar = "newVal"; 
} 

$obj = new ChildTestclass(); 
$obj->dosomething(); 

Questo codice eco newVal.

0

Aggiungi il metodo getter e setter alla tua classe.

public function setValue($new_value) 
{ 
    $this->testvar = $new_value; 
} 

public function getValue() 
{ 
    return $this->testvar;   
} 
2

Utilizzare i costruttori.

<?php 
class TestClass 
{ 
    public $testVar = "default value"; 
    public function __construct($varValue) 
    { 
     $this->testVar = $varValue;    
    } 
}  
$object = new TestClass('another value'); 
print $object->testVar; 
?> 
+0

il tuo codice non ha senso, non produrrà nulla – Greg

+2

controlla ora, ho cambiato il testvar per testVar –

0

Se avete intenzione di seguire gli esempi forniti (utilizzando getter/setter o di impostazione nel costruttore) Variazione al privato dal momento che questi sono modi per controllare ciò che viene impostato nella variabile.

Non ha senso mantenere la proprietà pubblica con tutte quelle cose aggiunte alla classe.

4
class Testclass 
{ 
    public $testvar; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); ////It will print "another value"