Variant HHVM_FUNCTION(class_implements, const Variant& obj, bool autoload /* = true */) { Class* cls; if (obj.isString()) { cls = Unit::getClass(obj.getStringData(), autoload); if (!cls) { String err = "class_implements(): Class %s does not exist"; if (autoload) { err += " and could not be loaded"; } raise_warning(err.c_str(), obj.toString().c_str()); return false; } } else if (obj.isObject()) { cls = obj.getObjectData()->getVMClass(); } else { raise_warning("class_implements(): object or string expected"); return false; } Array ret(Array::Create()); const Class::InterfaceMap& ifaces = cls->allInterfaces(); for (int i = 0, size = ifaces.size(); i < size; i++) { ret.set(ifaces[i]->nameStr(), make_tv<KindOfPersistentString>(ifaces[i]->name())); } return ret; }
Variant f_class_implements(CVarRef obj, bool autoload /* = true */) { Class* cls; if (obj.isString()) { cls = Unit::getClass(obj.getStringData(), autoload); if (!cls) { return false; } } else if (obj.isObject()) { cls = obj.getObjectData()->getVMClass(); } else { return false; } Array ret(Array::Create()); const Class::InterfaceMap& ifaces = cls->allInterfaces(); for (int i = 0, size = ifaces.size(); i < size; i++) { ret.set(ifaces[i]->nameRef(), ifaces[i]->nameRef()); } return ret; }