2011-01-29 9 views
1

У меня есть этот класс:Как напечатать элементы класса в PHP?

class MyClass { 
    public $dummy = array('foo', 'bar', 'baz', 'qux'); 
    public $progr = array('HTML', 'CSS', 'JS', 'PHP'); 
} 

Я пытаюсь напечатать, что из: print_r(MyClass), но она выводит MyClass и больше ничего. Я получаю похожие вещи с echo, print, var_dump и var_export. Кажется, что они обрабатывают MyClass как строку, потому что echo(test) выходы тест.

Итак, как я могу перечислить элементы класса?

ответ

3

Вы создали экземпляр?

Что делает этот вывод:

$m = new MyClass(); 
print_r($m); 
+2

Я думаю больше в классах, чем в объектах, поэтому мое использование reflecion ... +1 для более простого решения – BoltClock

+0

Я согласен, что это не совсем то, о чем спрашивал OP («Итак, как я могу перечислять элементы класс?"). Я предлагаю это как простой способ получить аналогичные результаты, хотя, полагаю, ваш ответ правильный. – mingos

+0

Я принимаю ваш ответ, потому что оба делают то, что я хочу, но ваши несколько проще, чем @ BoltClock. – nyuszika7h

3

Использование ReflectionClass на примере своего класса, и, возможно, использовать ReflectionProperty для получения значений свойств, как в вашем случае:

$rc = new ReflectionClass(new MyClass()); 

foreach ($rc->getProperties() as $property) { 
    printf('%s = %s', $property->getName(), print_r($property->getValue(), true)); 
} 

На второй мысли, если вы просто хотите, чтобы получить значение свойства объекта затем mingos' answer using print_r(new MyClass()); тоже работает.

Другое дело,

кажется, что они рассматривают MyClass как строку, так echo(test) выходов тест.

Это нормально: PHP сначала относится к ним как к постоянным именам, но если он не может найти константы, определенные с этими именами, то он рассматривает их как некорректные строковые литералы.

+0

Спасибо! 'print_r (new MyClass()) кажется мне прекрасным - спасибо, что напомнили мне о« новом », но этот« ReflectionClass »тоже хорош. – nyuszika7h

+1

новый ReflectionClass («MyClass»); было бы более подходящим – akond

+1

Да, мой перебор, я думаю, мне нужен сон. – BoltClock

2

Иногда может быть полезно реализовать метод магии __toString класса. Вкратце, __toString позволяет точно указать, как должен вести себя объект при его эхо. Для получения более подробной информации, обратитесь к следующему:

http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring

Мне нравится использовать __toString в качестве средства отладки, хотя я уверен, что истинный потенциал этого метода значительно более глубокого :)

Надежды что помогает.

+1

+1 для '__toString()', это довольно универсально. – BoltClock