Variant DynamicObjectData::o_root_invoke(const char *s, CArrRef params, int64 hash, bool fatal /* = false */) { if (root != this) { return root->o_root_invoke(s, params, hash, fatal); } else { return o_invoke(s, params, hash, fatal); } }
Variant DynamicObjectData::o_invoke_ex(const char *clsname, const char *s, CArrRef params, int64 hash, bool fatal /* = false */) { if (strcasecmp(o_getClassName(), clsname) == 0) { return o_invoke(s, params, hash); } else if(!parent.isNull()) { return parent->o_invoke_ex(clsname, s, params, hash, fatal); } else { return ObjectData::o_invoke_ex(clsname, s, params, hash, fatal); } }
Variant DynamicObjectData::o_invoke_mil(const char *s, CArrRef params, int64 hash, bool fatal /* = false */) { MethodIndex methodIndex(MethodIndex::fail()); if (RuntimeOption::FastMethodCall) { methodIndex = methodIndexExists(s); if (methodIndex.isFail()) { return root->doCall(s, params, fatal); } } return o_invoke( methodIndex, s, params, hash, fatal); }