Я знаю, что PHP5 позволит вам перебирать свойства класса. Однако, если класс расширяет другой класс, тогда он будет включать все те свойства, объявленные в родительском классе. Это нормально и все, никаких жалоб.
Тем не менее, я всегда понимал SELF как указатель на текущий класс, а $ this также указывает на текущий объект (включая материал, унаследованный от родителя)
Есть ли способ, которым я могу выполнять итерацию ТОЛЬКО через свойства текущего класса. Причина, почему я прошу об этом … Я использую CI и итерации через $, это включает в себя тонны родительских свойств, которые мне не нужны.
<?php class parent { public $s_parent = "Parent sez hi!"; public $i_lucky_number = 6; } class child extends parent { public $s_child = "Child sez hi!"; public $s_foobar = "What What!!"; public $i_lucky_number = 7; public iterate() { foreach ($this as $s_key => $m_val) { echo "$s_key => $m_val<br />\n"; } } } $o_child = new child(); $o_child->iterate()
Выход
s_parent => Parent sez hi! s_child => Child sez hi! s_foobar => What What!! i_lucky_number => 7
Я НЕ хочу видеть «s_parent => Parent sez hi!»
Я просто хочу перебирать свойства текущего класса. Не те, которые унаследованы в других местах.
Заранее спасибо.
Используя методы Reflection, вы можете сделать следующее:
public function iterate() { $refclass = new ReflectionClass($this); foreach ($refclass->getProperties() as $property) { $name = $property->name; if ($property->class == $refclass->name) echo "{$property->name} => {$this->$name}\n"; } }