#php #reflection #magento
#php #отражение #magento
Вопрос:
Каждый объект в иерархии отражения PHP имеет статический метод экспорта. Вы можете можете использовать это, чтобы получить строковое представление класса. Закодируйте что-то вроде этого
$c = new ReflectionClass('Mage_Core_Model_Abstract');
ReflectionClass::export($c)
будет ли повторено следующее
Class [ <internal:Reflection> class ReflectionClass implements Reflector ] {
- Constants [3] {
Constant [ integer IS_IMPLICIT_ABSTRACT ] { 16 }
Constant [ integer IS_EXPLICIT_ABSTRACT ] { 32 }
Constant [ integer IS_FINAL ] { 64 }
}
- Static properties [0] {
}
- Static methods [1] {
Method [ <internal:Reflection> static public method export ] {
- Parameters [2] {
Parameter #0 [ <required> $argument ]
Parameter #1 [ <optional> $return ]
}
}
}
- Properties [1] {
Property [ <default> public $name ]
}
- Methods [43] {
Method [ <internal:Reflection> final private method __clone ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection, ctor> public method __construct ] {
- Parameters [1] {
Parameter #0 [ <required> $argument ]
}
}
Method [ <internal:Reflection> public method __toString ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getName ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isInternal ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isUserDefined ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isInstantiable ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getFileName ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getStartLine ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getEndLine ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getDocComment ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getConstructor ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method hasMethod ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getMethod ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getMethods ] {
- Parameters [1] {
Parameter #0 [ <optional> $filter ]
}
}
Method [ <internal:Reflection> public method hasProperty ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getProperty ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getProperties ] {
- Parameters [1] {
Parameter #0 [ <optional> $filter ]
}
}
Method [ <internal:Reflection> public method hasConstant ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getConstants ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getConstant ] {
- Parameters [1] {
Parameter #0 [ <required> $name ]
}
}
Method [ <internal:Reflection> public method getInterfaces ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getInterfaceNames ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isInterface ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isAbstract ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isFinal ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getModifiers ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isInstance ] {
- Parameters [1] {
Parameter #0 [ <required> $object ]
}
}
Method [ <internal:Reflection> public method newInstance ] {
- Parameters [1] {
Parameter #0 [ <required> $args ]
}
}
Method [ <internal:Reflection> public method newInstanceArgs ] {
- Parameters [1] {
Parameter #0 [ <optional> array $args ]
}
}
Method [ <internal:Reflection> public method getParentClass ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isSubclassOf ] {
- Parameters [1] {
Parameter #0 [ <required> $class ]
}
}
Method [ <internal:Reflection> public method getStaticProperties ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getStaticPropertyValue ] {
- Parameters [2] {
Parameter #0 [ <required> $name ]
Parameter #1 [ <optional> $default ]
}
}
Method [ <internal:Reflection> public method setStaticPropertyValue ] {
- Parameters [2] {
Parameter #0 [ <required> $name ]
Parameter #1 [ <required> $value ]
}
}
Method [ <internal:Reflection> public method getDefaultProperties ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method isIterateable ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method implementsInterface ] {
- Parameters [1] {
Parameter #0 [ <required> $interface ]
}
}
Method [ <internal:Reflection> public method getExtension ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getExtensionName ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method inNamespace ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getNamespaceName ] {
- Parameters [0] {
}
}
Method [ <internal:Reflection> public method getShortName ] {
- Parameters [0] {
}
}
}
}
Что это за формат? Если это просто что-то произвольное, разработанное внутренней командой PHP, или это известный формат, который может быть проанализирован другими известными инструментами программирования?
Чтобы уточнить, я знаю, что такое отражение и как его использовать. Что мне интересно, так это формат «экспорта», который кажется преднамеренно разработанным, но НЕ является допустимым PHP. Это какой-то стандартный формат CS / программирования или просто что-то одноразовое для PHP?
Комментарии:
1. Понятия не имею, но могу поспорить, что это внутренний формат вывода. По крайней мере, я бы не ожидал вывода в стандартизированном формате, поскольку
export
этоabstract
метод дляReflector
интерфейса. Но, возможно, это только мне кажется ^^2. Я согласен с Юргеном, это не похоже на какой-то стандартизированный формат. Именно так команда PHP Core представляет удобный для чтения формат.
Ответ №1:
Этот формат представляет собой представление того, как движок Zend хранит класс, как только он его проанализирует, вы правы в том, что это недопустимый PHP.