Array f_get_class_vars(CStrRef class_name) { ClassInfo::PropertyVec properties; ClassInfo::GetClassProperties(properties, class_name); CStrRef context = FrameInjection::GetClassName(true); const ClassInfo *cls = NULL; if (!context.empty()) { cls = ClassInfo::FindClass(context); } Array ret = Array::Create(); // PHP has instance variables appear before static variables... for (unsigned int i = 0; i < properties.size(); i++) { if (!(properties[i]->attribute & ClassInfo::IsStatic) && properties[i]->isVisible(cls)) { ret.set(properties[i]->name, get_class_var_init(class_name.c_str(), properties[i]->name)); } } for (unsigned int i = 0; i < properties.size(); i++) { if (properties[i]->attribute & ClassInfo::IsStatic && properties[i]->isVisible(cls)) { ret.set(properties[i]->name, get_static_property(class_name.c_str(), properties[i]->name)); } } return ret; }
Variant f_hphp_get_static_property(CStrRef cls, CStrRef prop) { return get_static_property(cls.data(), prop.data()); }