2011-04-13 15 views

Respuesta

18

get_class_vars() toma la class_name get_object_vars() toma una variable $ object

Ambos funcionan de forma parecida:

get_class_vars() expondrá variables públicas por defecto (o privado/protegido si se llama dentro de la clase) get_object_vars() expondrá las variables públicas actuales (o privada/protegida si se llama dentro del objeto de la clase)

Ninguno expondrá los métodos.

+2

Así que uno es para su uso con la definición (clase), y el otro es para el uso con una instancia (objeto)? –

+2

exactamente correcto – ohmusama

15

Como se puede ver en la get_class_vars y get_object_vars páginas del manual, get_class_vars obtiene el valor por defecto los valores de las propiedades de una clase, y get_object_vars tiene la actual valores de propiedades de un objeto.

Además, get_class_vars toma una cadena (es decir, el nombre de una clase), mientras que get_object_vars toma un objeto.

class Example 
{ 
    public $var = 123; 
} 

$e = new Example(); 
$e->var = 456; 

var_dump(get_class_vars("Example")); 
/* 
array(1) { 
    ["var"]=> 
    int(123) 
} 
*/ 

var_dump(get_object_vars($e)); 
/* 
array(1) { 
    ["var"]=> 
    int(456) 
} 
*/ 
3

Theres una cosa más:

get_object_vars() no ve las variables estáticas, pero ve VARs creados durante el tiempo de ejecución!
get_class_vars() VEA las estáticas, pero NO ve nuevas variables creadas durante el tiempo de ejecución, por ej. en el constructor:

public function __construct() {$this->newval = "newval";} 
0

get_class_vars() le da las variables aún no estáticos, pero sus valores se toman en el momento de la creación de objeto, por ejemplo. valores init

1

A partir de PHP 5.5.9

me he dado cuenta de que en realidad hay una ligera diferencia entre get_class_vars y get_object_vars.

En relación con PHP Bug Report, y yo mismo lo he probado.

Ambos métodos devuelven el mismo resultado. PERO, puede manipular las propiedades del objeto usando get_object_vars y no con get_class_vars.

Considérese el siguiente ejemplo,

class Foo 
{ 
    public $bar = null; 
    public function __construct() { 
    $this->bar = new DateTime(); // Now 
    $this->far = &$this->bar; 
    } 
} 
$foo = new Foo(); 
var_dump($foo); 
$vars = get_object_vars($foo); 
$vars['bar'] = new DateTime('2014-03-25'); 
var_dump($foo); 

En el ejemplo anterior, se puede observar que la segunda var_dump se han $foo->bar modificado.

Nota: Si intenta cambiar el método de get_object_vars a get_class_vars, que también cuenta de que no se $foo->bar modificada.