If you need get the child protected/private vars ignoring the parent vars, use like this:
<?php
class childClass extends parentClass {
private $login;
private $password;
public function __set($key, $val) {
if ($key == 'password')
$this->$key = md5($val);
else
$this->$key = $val;
}
}
class parentClass {
public $name;
public $email;
function __construct() {
$reflection = new ReflectionClass($this);
$vars = array_keys($reflection->getdefaultProperties());
$reflection = new ReflectionClass(__CLASS__);
$parent_vars = array_keys($reflection->getdefaultProperties());
$my_child_vars = array();
foreach ($vars as $key) {
if (!in_array($key, $parent_vars)) {
$my_child_vars[] = $key;
}
}
print_r($my_child_vars);
}
}
$child_class = new childClass();
?>
get_class_vars
(PHP 4, PHP 5)
get_class_vars — Get the default properties of the class
Description
array get_class_vars
( string $class_name
)
Get the default properties of the given class.
Parameters
- class_name
-
The class name
Return Values
Returns an associative array of default public properties of the class. The resulting array elements are in the form of varname => value.
Changelog
| Version | Description |
|---|---|
| 5.0.3 | Depending on the scope, get_class_vars() will only return the properties that can be accessed from the current scope. |
| 5.0.2 | Calling get_class_vars() will now expose all the properties as an array, unlike previous behaviour where protected and private properties were prefixed with nul bytes. |
| 5.0.1 | Calling get_class_vars() will expose all properties, as when converting an object to a class. |
| Prior to 4.2.0 | Uninitialized class variables will not be reported by get_class_vars() |
Examples
Example #1 get_class_vars() example
<?php
class myclass {
var $var1; // this has no default value...
var $var2 = "xyz";
var $var3 = 100;
private $var4; // PHP 5
// constructor
function myclass() {
// change some properties
$this->var1 = "foo";
$this->var2 = "bar";
return true;
}
}
$my_class = new myclass();
$class_vars = get_class_vars(get_class($my_class));
foreach ($class_vars as $name => $value) {
echo "$name : $value\n";
}
?>
The above example will output:
// Before PHP 4.2.0 var2 : xyz var3 : 100 // As of PHP 4.2.0 var1 : var2 : xyz var3 : 100
Example #2 get_class_vars() and scoping behaviour
<?php
function format($array)
{
return implode('|', array_keys($array)) . "\r\n";
}
class TestCase
{
public $a = 1;
protected $b = 2;
private $c = 3;
public static function expose()
{
echo format(get_class_vars(__CLASS__));
}
}
TestCase::expose();
echo format(get_class_vars('TestCase'));
?>
The above example will output:
// 5.0.0 a| * b| TestCase c a| * b| TestCase c // 5.0.1 - 5.0.2 a|b|c a|b|c // 5.0.3 + a|b|c a
See Also
- get_class_methods() - Gets the class methods' names
- get_object_vars() - Gets the properties of the given object
get_class_vars
ianitsky at gmail dot com
10-Nov-2009 07:53
10-Nov-2009 07:53
harmor
20-Dec-2008 11:53
20-Dec-2008 11:53
So I wanted to get a list of the public parameters in a child class using a static function pre-5.3.0 (< 5.3.0). In 5.3.0+ you would use the new 'static' like you would 'self' to get the late binding.
<?php
class childClass extends parentClass
{
public $id;
public $name;
public static function getFields()
{
return self::_getFields(__CLASS__);
}
}
abstract class parentClass
{
public $idInParent;
public $nameInParent;
abstract public static function getFields();
final protected static function _getFields($className)
{
$rtn = array();
foreach (array_keys(get_class_vars($className)) as $var) {
$rtn[] = $var;
}
return $rtn;
}
}
var_dump(childClass::getFields());
?>
Results:
array(4) {
[0]=>
string(2) "id"
[1]=>
string(4) "name"
[2]=>
string(10) "idInParent"
[3]=>
string(12) "nameInParent"
}
artktec at art-k-tec dot com
16-Nov-2007 05:18
16-Nov-2007 05:18
There seems to be be a function to get constants missing , i.e. get_class_constants() ... so here is a simple function for you all. Hopefully Zend will include this in the next round as a native php call, without using reflection.
<?php
function GetClassConstants($sClassName) {
$oClass = new ReflectionClass($sClassName);
return $oClass->getConstants());
}
?>
phpnet at stccorp dot net
15-Jun-2007 12:18
15-Jun-2007 12:18
This is one of the best php functions. Look at what you can do
class Object
{
var $updtFields;//keep track of affected values
function Object($record="") {
if (is_array($record))
{
$this->updtFields = array();
foreach(array_keys(get_class_vars(get_class($this))) as $k)
if (isset($record[$k]))
{
$this->$k = $record[$k];
$this->updtFields[] = $k;
}
}
}//end of arrayToObject
function toDebug($nl='<br>')
{
foreach(array_keys(get_class_vars(get_class($this))) as $k)
echo "$k = [" . $this->$k . "]{$nl}";
}//end of toDebug
}
Now you can do really cool things. If you have a form like
<form action="" method="post">
<input type="text" name="name" />
<input type="text" name="phone" />
<input type="submit" />
</form>
and you define your class like this
class Person extends Object{
var $name; //same same as in the form
var $phone;
}
when you submmit the form, you can get the data like
$person = new Person($_POST);
//everything in just one line,cool!! Also if you use pear db or adodb when you get data from the database you can do the same thing except use the $row that you get from the database. Remember to ask the result is associative mode.
This is my core Object for everthing I do and it works great.
bernd at tiggerswelt dot net
29-Jan-2007 10:52
29-Jan-2007 10:52
If you assign a constant value using the self-scope by default to a variable, get_class_vars() will result in a FATAL error.
Example:
<?PHP
class Foo {
const Bar = "error";
public $Foo = self::Bar;
}
print_r(get_class_vars("Foo"));
?>
... but using "Foo::Bar" instead "self::Bar" will work ;)
gizmobits at hotmail dot com
04-Mar-2006 03:48
04-Mar-2006 03:48
I wanted a simple ToString() function that was automatic and class independent. I wanted to dump it into any of several classes and get values quickly. I wanted to leave it there so I could customize it for each class, so an outside function wasn't suitable. I came up with this and thought it might be useful. Have fun!
<?php
function ToString () {
$s = "";
$s .= "<table>\n";
$s .= "<tr><td colspan=2><hr></td></tr>\n";
foreach (get_class_vars(get_class($this)) as $name => $value) {
$s .= "<tr><td>$name:</td><td>" . $this->$name . "</td></tr>\n";
}
$s .= "<tr><td colspan=2><hr></td></tr>\n";
$s .= "</table>\n";
return $s;
}
?>
php dot net at sharpdreams dot com
25-Oct-2005 01:25
25-Oct-2005 01:25
Contrary to multiple comments throughout the manual, get_class_vars() performed within a class can access any public, protected, and private members.
<?php
class Foo {
public $x;
protected $y;
private $z;
public function __sleep() {
return( get_class_vars( __CLASS__ ) );
}
}
?>
works fine (returns x, y, & z). However, given the same class as above,
<?php
print_r( get_class_vars( "Foo" ) );
?>
will NOT return x, y, & z. Instead it will only return the public members (in our case, z).
alan_k at php dot net
22-Jan-2005 03:23
22-Jan-2005 03:23
in PHP5 to get all the vars (including private etc.) use:
$reflection = new ReflectionClass($class);
$defaults = $reflection->getdefaultProperties();
rec at NOSPAM dot instantmassacre dot com
24-Jan-2003 12:23
24-Jan-2003 12:23
If you want to retrieve the class vars from within the class itself, use $this.
<?php
class Foo {
var $a;
var $b;
var $c;
var $d;
var $e;
function GetClassVars()
{
return array_keys(get_class_vars(get_class($this))); // $this
}
}
$Foo = new Foo;
$class_vars = $Foo->GetClassVars();
foreach ($class_vars as $cvar)
{
echo $cvar . "<br />\n";
}
?>
Produces, after PHP 4.2.0, the following:
a
b
c
d
e
