bool DynamicObjectData::o_get_call_info_ex(const char *clsname, MethodCallPackage &info, int64 hash /* = -1 */) { if (strcasecmp(o_getClassName(), clsname) == 0) { return o_get_call_info(info, hash); } else if(!parent.isNull()) { return parent->o_get_call_info_ex(clsname, info, hash); } else { return ObjectData::o_get_call_info_ex(clsname, info, hash); } }
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); } }
bool TestCppBase::TestObject() { { String s = "O:1:\"B\":1:{s:3:\"obj\";O:1:\"A\":1:{s:1:\"a\";i:10;}}"; Variant v = unserialize_from_string(s); VERIFY(v.isObject()); auto o = v.toObject(); VS(o->o_getClassName().asString(), "__PHP_Incomplete_Class"); auto os = HHVM_FN(serialize)(o); VS(os, "O:1:\"B\":1:{s:3:\"obj\";O:1:\"A\":1:{s:1:\"a\";i:10;}}"); } return Count(true); }
void EvalObjectData::o_setArray(CArrRef props) { for (ArrayIter it(props); !it.end(); it.next()) { String k = it.first(); if (!k.empty() && k.charAt(0) == '\0') { int subLen = k.find('\0', 1) + 1; String cls = k.substr(1, subLen - 2); String key = k.substr(subLen); if (cls == "*") cls = o_getClassName(); props->load(k, o_lval(key, Variant(), cls)); } } DynamicObjectData::o_setArray(props); }
bool TestCppBase::TestObject() { { String s = "O:1:\"B\":1:{s:3:\"obj\";O:1:\"A\":1:{s:1:\"a\";i:10;}}"; Variant v = unserialize_from_string(s); VERIFY(v.isObject()); auto o = v.toObject(); VS(o->o_getClassName(), "__PHP_Incomplete_Class"); auto os = f_serialize(o); VS(os, "O:1:\"B\":1:{s:3:\"obj\";O:1:\"A\":1:{s:1:\"a\";i:10;}}"); } VERIFY(!equal(Object(new TestResource()), Object(new TestResource()) )); return Count(true); }
Array File::getMetaData() { Array ret = Array::Create(); ret.set("wrapper_type", o_getClassName()); ret.set("stream_type", getStreamType()); ret.set("mode", String(m_mode)); ret.set("unread_bytes", 0); ret.set("seekable", seekable()); ret.set("uri", String(m_name)); ret.set("timed_out", false); ret.set("blocked", true); ret.set("eof", eof()); return ret; }
void EvalObjectData::o_getArray(Array &props, bool pubOnly /* = false */) const { if (!pubOnly) { String zero("\0", 1, AttachLiteral); for (ArrayIter it(m_privates); !it.end(); it.next()) { String prefix(zero); prefix += it.first(); prefix += zero; for (ArrayIter it2(it.second()); !it2.end(); it2.next()) { CVarRef v = it2.secondRef(); if (v.isInitialized()) { props.lvalAt(prefix + it2.first()).setWithRef(v); } } } } DynamicObjectData::o_getArray(props, pubOnly); if (pubOnly) { const ClassInfo *info = ClassInfo::FindClass(o_getClassName()); info->filterProperties(props, ClassInfo::IsProtected); } }
const String& ResourceData::o_getResourceName() const { return o_getClassName(); }
CStrRef ResourceData::o_getResourceName() const { return o_getClassName(); }
const char *ResourceData::o_getResourceName() const { return o_getClassName().data(); }