Commit 25672c17 authored by Paul Yang's avatar Paul Yang Committed by GitHub

Add getClass for php Descriptor in c extension (#3443)

parent 9df89cca
......@@ -184,6 +184,7 @@ void gpb_type_init(TSRMLS_D) {
// -----------------------------------------------------------------------------
static zend_function_entry descriptor_methods[] = {
PHP_ME(Descriptor, getClass, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Descriptor, getFullName, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Descriptor, getField, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Descriptor, getFieldCount, NULL, ZEND_ACC_PUBLIC)
......@@ -234,6 +235,16 @@ static void descriptor_init_c_instance(Descriptor *desc TSRMLS_DC) {
desc->json_serialize_handlers_preserve = NULL;
}
PHP_METHOD(Descriptor, getClass) {
Descriptor *intern = UNBOX(Descriptor, getThis());
#if PHP_MAJOR_VERSION < 7
const char* classname = intern->klass->name;
#else
const char* classname = ZSTR_VAL(intern->klass->name);
#endif
PHP_PROTO_RETVAL_STRINGL(classname, strlen(classname), 1);
}
PHP_METHOD(Descriptor, getFullName) {
Descriptor *intern = UNBOX(Descriptor, getThis());
const char* fullname = upb_msgdef_fullname(intern->msgdef);
......
......@@ -508,6 +508,7 @@ PHP_PROTO_WRAP_OBJECT_START(Descriptor)
const upb_handlers* json_serialize_handlers_preserve;
PHP_PROTO_WRAP_OBJECT_END
PHP_METHOD(Descriptor, getClass);
PHP_METHOD(Descriptor, getFullName);
PHP_METHOD(Descriptor, getField);
PHP_METHOD(Descriptor, getFieldCount);
......
......@@ -75,9 +75,12 @@ class DescriptorsTest extends TestBase
public function testDescriptor()
{
$pool = DescriptorPool::getGeneratedPool();
$desc = $pool->getDescriptorByClassName(get_class(new TestDescriptorsMessage()));
$class = get_class(new TestDescriptorsMessage());
$this->assertSame('Descriptors\TestDescriptorsMessage', $class);
$desc = $pool->getDescriptorByClassName($class);
$this->assertSame('descriptors.TestDescriptorsMessage', $desc->getFullName());
$this->assertSame($class, $desc->getClass());
$this->assertInstanceOf('\Google\Protobuf\FieldDescriptor', $desc->getField(0));
$this->assertSame(7, $desc->getFieldCount());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment