diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-08-02 18:33:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-02 18:33:25 -0700 |
commit | 25672c175792f707c71c9aa9fcd29cab31c757fa (patch) | |
tree | 8694aeec1617ab1c1fd07473878bd1ac4d085a58 /php | |
parent | 9df89ccabcf8ad7d634009a00faf0e9ba153bdb7 (diff) |
Add getClass for php Descriptor in c extension (#3443)
Diffstat (limited to 'php')
-rw-r--r-- | php/ext/google/protobuf/def.c | 11 | ||||
-rw-r--r-- | php/ext/google/protobuf/protobuf.h | 1 | ||||
-rw-r--r-- | php/tests/descriptors_test.php | 5 |
3 files changed, 16 insertions, 1 deletions
diff --git a/php/ext/google/protobuf/def.c b/php/ext/google/protobuf/def.c index ae17455c..f885c145 100644 --- a/php/ext/google/protobuf/def.c +++ b/php/ext/google/protobuf/def.c @@ -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); diff --git a/php/ext/google/protobuf/protobuf.h b/php/ext/google/protobuf/protobuf.h index 1f79fe8c..44a4155f 100644 --- a/php/ext/google/protobuf/protobuf.h +++ b/php/ext/google/protobuf/protobuf.h @@ -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); diff --git a/php/tests/descriptors_test.php b/php/tests/descriptors_test.php index c3833c24..17e8a4f2 100644 --- a/php/tests/descriptors_test.php +++ b/php/tests/descriptors_test.php @@ -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()); |