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) { ...@@ -184,6 +184,7 @@ void gpb_type_init(TSRMLS_D) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static zend_function_entry descriptor_methods[] = { 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, getFullName, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Descriptor, getField, NULL, ZEND_ACC_PUBLIC) PHP_ME(Descriptor, getField, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Descriptor, getFieldCount, 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) { ...@@ -234,6 +235,16 @@ static void descriptor_init_c_instance(Descriptor *desc TSRMLS_DC) {
desc->json_serialize_handlers_preserve = NULL; 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) { PHP_METHOD(Descriptor, getFullName) {
Descriptor *intern = UNBOX(Descriptor, getThis()); Descriptor *intern = UNBOX(Descriptor, getThis());
const char* fullname = upb_msgdef_fullname(intern->msgdef); const char* fullname = upb_msgdef_fullname(intern->msgdef);
......
...@@ -508,6 +508,7 @@ PHP_PROTO_WRAP_OBJECT_START(Descriptor) ...@@ -508,6 +508,7 @@ PHP_PROTO_WRAP_OBJECT_START(Descriptor)
const upb_handlers* json_serialize_handlers_preserve; const upb_handlers* json_serialize_handlers_preserve;
PHP_PROTO_WRAP_OBJECT_END PHP_PROTO_WRAP_OBJECT_END
PHP_METHOD(Descriptor, getClass);
PHP_METHOD(Descriptor, getFullName); PHP_METHOD(Descriptor, getFullName);
PHP_METHOD(Descriptor, getField); PHP_METHOD(Descriptor, getField);
PHP_METHOD(Descriptor, getFieldCount); PHP_METHOD(Descriptor, getFieldCount);
......
...@@ -75,9 +75,12 @@ class DescriptorsTest extends TestBase ...@@ -75,9 +75,12 @@ class DescriptorsTest extends TestBase
public function testDescriptor() public function testDescriptor()
{ {
$pool = DescriptorPool::getGeneratedPool(); $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('descriptors.TestDescriptorsMessage', $desc->getFullName());
$this->assertSame($class, $desc->getClass());
$this->assertInstanceOf('\Google\Protobuf\FieldDescriptor', $desc->getField(0)); $this->assertInstanceOf('\Google\Protobuf\FieldDescriptor', $desc->getField(0));
$this->assertSame(7, $desc->getFieldCount()); $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