En cuanto a PHP, ¿cuáles son las diferencias entre:PHP: get_class_vars() vs. get_object_vars()
- get_class_vars()
- get_object_vars()
En cuanto a PHP, ¿cuáles son las diferencias entre:PHP: get_class_vars() vs. get_object_vars()
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.
Así que uno es para su uso con la definición (clase), y el otro es para el uso con una instancia (objeto)? –
exactamente correcto – ohmusama
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)
}
*/
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";}
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
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
aget_class_vars
, que también cuenta de que no se$foo->bar
modificada.
Vaya con manual de PHP tienen mucha descripción –