2009-12-30 13 views
10

¿Cómo configuro una variable pública? Es correcto ?:Configuración de variables de clase pública

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

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

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

Su forma es bien – Greg

Respuesta

21

esto es cierto, pero yo sugeriría escribir una getter y setter para esa variable.

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 y getter, debe establecer $ testvar en privado :) – nXqd

+0

oh sí, eso sería más apropiado. Gracias por señalar. – marvin

+1

¿Por qué sugieres esto? ¿Esto está desactualizado o sigue siendo un buen método? – tehlivi

0

Dentro class Testclass:

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

Estas "ajustar" el valor de esa variable/atributo. No anularlo ni sobrecargarlo. Tu código es muy, muy común y normal.

Todos estos términos ("set", "override", "overload") tienen significados específicos. Override y Overload son sobre polimorfismo (subclases).

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

polimorfismo permite al programador para el tratamiento de miembros de la clase derivados al igual que sus padres miembros de la clase. Más precisamente, el polimorfismo en la programación orientada a objetos es la capacidad de los objetos pertenecientes a diferentes tipos de datos para responder a las llamadas a métodos de los métodos del mismo nombre, cada uno de acuerdo con un comportamiento específico específico del tipo. Un método, o un operador como +, - o *, se puede aplicar de forma abstracta en muchas situaciones diferentes. Si se le ordena a un perro que hable(), esto puede provocar un ladrido(). Sin embargo, si se le ordena a un cerdo hablar(), esto puede provocar un oink(). Ambos heredan speak() de Animal, pero sus métodos de clase derivados anulan los métodos de la clase principal; este es el Polimorfismo Superior. Polimorfismo de sobrecarga es el uso de una firma de método, o un operador como "+", para realizar varias funciones diferentes dependiendo de la implementación. El operador "+", por ejemplo, se puede usar para realizar una suma entera, una suma flotante, una concatenación de lista o una concatenación de cadena. Se espera que cualquiera de las dos subclases de Número, como Integer y Double, se sumen correctamente en un lenguaje OOP. Por lo tanto, el lenguaje debe sobrecargar al operador de suma, "+", para que funcione de esta manera. Esto ayuda a mejorar la legibilidad del código. Cómo se implementa esto varía de idioma a idioma, pero la mayoría de los lenguajes OOP admiten al menos algún nivel de polimorfismo de sobrecarga.

+0

Sí ... Fue simplemente utiliza el término equivocado – Cudos

+0

sobrecarga y anular y establecer todos tienen significados específicos. ¿Recibió la respuesta que estaba buscando sobre su código? ¿O está específicamente buscando información sobre sobrecarga? –

+0

Acabo de ver su última edición de la pregunta. Lo estás haciendo bien. Como han dicho otros, puede usar los métodos get y set si lo desea, pero no es necesario. Tienen ventajas, especialmente si necesita verificar que los datos son de cierto tipo antes de configurarlo. –

0

Para la sobrecarga que había necesidad de una subclase:

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

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

Este código se haría eco de newVal.

0

Agregue método getter y setter a su clase.

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

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

Usar constructores.

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

su código no tiene sentido, no dará como resultado nada – Greg

+2

comprobar ahora, cambié el testvar a testVar –

0

Si va a seguir los ejemplos dados (utilizando captador/definidor o ajuste en el constructor) cambiarlo a lo privado ya que esos son maneras de controlar lo que se establece en la variable.

No tiene sentido mantener la propiedad pública con todas esas cosas añadidas a la clase.

4
class Testclass 
{ 
    public $testvar; 

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

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