[prev in list] [next in list] [prev in thread] [next in thread]
List: php-cvs
Subject: [PHP-CVS] =?utf-8?q?svn:_/php/php-src/trunk/ext/reflection/_php=5Freflection.c_tests/ReflectionClass
From: Johannes_Schlüter <johannes () php ! net>
Date: 2010-05-30 1:00:45
Message-ID: svn-johannes-1275181245-299946-1785509799 () svn ! php ! net
[Download RAW message or body]
johannes Sun, 30 May 2010 01:00:45 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=299946
Log:
- More trait reflection work
#- I'm not happy about ReflectionClass::getTraitAliases, yet
Changed paths:
U php/php-src/trunk/ext/reflection/php_reflection.c
U php/php-src/trunk/ext/reflection/tests/ReflectionClass_toString_001.phpt
A php/php-src/trunk/ext/reflection/tests/traits004.phpt
A php/php-src/trunk/ext/reflection/tests/traits005.phpt
Modified: php/php-src/trunk/ext/reflection/php_reflection.c
===================================================================
--- php/php-src/trunk/ext/reflection/php_reflection.c 2010-05-30 00:51:55 UTC (rev \
299945)
+++ php/php-src/trunk/ext/reflection/php_reflection.c 2010-05-30 01:00:45 UTC (rev \
299946) @@ -4254,6 +4254,80 @@
}
/* }}} */
+/* {{{ proto public ReflectionClass[] ReflectionClass::getTraits()
+ Returns an array of traits used by this class */
+ZEND_METHOD(reflection_class, getTraits)
+{
+ reflection_object *intern;
+ zend_class_entry *ce;
+ zend_uint i;
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ return;
+ }
+ GET_REFLECTION_OBJECT_PTR(ce);
+
+ array_init(return_value);
+
+ for (i=0; i < ce->num_traits; i++) {
+ zval *trait;
+ ALLOC_ZVAL(trait);
+ zend_reflection_class_factory(ce->traits[i], trait TSRMLS_CC);
+ add_assoc_zval_ex(return_value, ce->traits[i]->name, ce->traits[i]->name_length + \
1, trait); + }
+}
+/* }}} */
+
+/* {{{ proto public String[] ReflectionClass::getTraitNames()
+ Returns an array of names of traits used by this class */
+ZEND_METHOD(reflection_class, getTraitNames)
+{
+ reflection_object *intern;
+ zend_class_entry *ce;
+ zend_uint i;
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ return;
+ }
+ GET_REFLECTION_OBJECT_PTR(ce);
+
+ array_init(return_value);
+
+ for (i=0; i < ce->num_traits; i++) {
+ add_next_index_stringl(return_value, ce->traits[i]->name, \
ce->traits[i]->name_length, 1); + }
+}
+/* }}} */
+
+/* {{{ proto public arra ReflectionClass::getTraitaliases()
+ Returns an array of trait aliases */
+ZEND_METHOD(reflection_class, getTraitAliases)
+{
+ reflection_object *intern;
+ zend_class_entry *ce;
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ return;
+ }
+ GET_REFLECTION_OBJECT_PTR(ce);
+
+ array_init(return_value);
+
+ if (ce->trait_aliases) {
+ zend_uint i = 0;
+ while (ce->trait_aliases[i]) {
+ char *method_name;
+ int method_name_len;
+ zend_trait_method_reference *cur_ref = ce->trait_aliases[i]->trait_method;
+
+ method_name_len = spprintf(&method_name, 0, "%s::%s", cur_ref->class_name, \
cur_ref->method_name); + add_assoc_stringl_ex(return_value, \
ce->trait_aliases[i]->alias, ce->trait_aliases[i]->alias_len + 1, method_name, \
method_name_len, 0); + i++;
+ }
+ }
+}
+/* }}} */
+
/* {{{ proto public ReflectionClass ReflectionClass::getParentClass()
Returns the class' parent class, or, if none exists, FALSE */
ZEND_METHOD(reflection_class, getParentClass)
@@ -5636,6 +5710,9 @@
ZEND_ME(reflection_class, getInterfaces, arginfo_reflection__void, 0)
ZEND_ME(reflection_class, getInterfaceNames, arginfo_reflection__void, 0)
ZEND_ME(reflection_class, isInterface, arginfo_reflection__void, 0)
+ ZEND_ME(reflection_class, getTraits, arginfo_reflection__void, 0)
+ ZEND_ME(reflection_class, getTraitNames, arginfo_reflection__void, 0)
+ ZEND_ME(reflection_class, getTraitAliases, arginfo_reflection__void, 0)
ZEND_ME(reflection_class, isTrait, arginfo_reflection__void, 0)
ZEND_ME(reflection_class, isAbstract, arginfo_reflection__void, 0)
ZEND_ME(reflection_class, isFinal, arginfo_reflection__void, 0)
Modified: php/php-src/trunk/ext/reflection/tests/ReflectionClass_toString_001.phpt
===================================================================
--- php/php-src/trunk/ext/reflection/tests/ReflectionClass_toString_001.phpt 2010-05-30 \
00:51:55 UTC (rev 299945)
+++ php/php-src/trunk/ext/reflection/tests/ReflectionClass_toString_001.phpt 2010-05-30 \
01:00:45 UTC (rev 299946) @@ -34,7 +34,7 @@
Property [ <default> public $name ]
}
- - Methods [44] {
+ - Methods [47] {
Method [ <internal:Reflection> final private method __clone ] {
- Parameters [0] {
@@ -188,6 +188,24 @@
}
}
+ Method [ <internal:Reflection> public method getTraits ] {
+
+ - Parameters [0] {
+ }
+ }
+
+ Method [ <internal:Reflection> public method getTraitNames ] {
+
+ - Parameters [0] {
+ }
+ }
+
+ Method [ <internal:Reflection> public method getTraitAliases ] {
+
+ - Parameters [0] {
+ }
+ }
+
Method [ <internal:Reflection> public method isTrait ] {
- Parameters [0] {
Added: php/php-src/trunk/ext/reflection/tests/traits004.phpt
===================================================================
--- php/php-src/trunk/ext/reflection/tests/traits004.phpt \
(rev 0)
+++ php/php-src/trunk/ext/reflection/tests/traits004.phpt 2010-05-30 01:00:45 UTC \
(rev 299946) @@ -0,0 +1,58 @@
+--TEST--
+ReflectionClass::getTraits() and ReflectionClass::getTraitNames
+--FILE--
+<?php
+trait T1 { }
+trait T2 { }
+
+class C1 { }
+class C2 { use T1; }
+class C3 { use T1; use T2; }
+
+for ($c = "C1"; $c <= "C3"; $c++) {
+ echo "class $c:\n";
+ $r = new ReflectionClass($c);
+ var_dump($r->getTraitNames());
+ var_dump($r->getTraits());
+ echo "\n";
+}
+--EXPECT--
+class C1:
+array(0) {
+}
+array(0) {
+}
+
+class C2:
+array(1) {
+ [0]=>
+ string(2) "T1"
+}
+array(1) {
+ ["T1"]=>
+ &object(ReflectionClass)#1 (1) {
+ ["name"]=>
+ string(2) "T1"
+ }
+}
+
+class C3:
+array(2) {
+ [0]=>
+ string(2) "T1"
+ [1]=>
+ string(2) "T2"
+}
+array(2) {
+ ["T1"]=>
+ &object(ReflectionClass)#2 (1) {
+ ["name"]=>
+ string(2) "T1"
+ }
+ ["T2"]=>
+ &object(ReflectionClass)#3 (1) {
+ ["name"]=>
+ string(2) "T2"
+ }
+}
+
Property changes on: php/php-src/trunk/ext/reflection/tests/traits004.phpt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision
Added: svn:eol-style
+ native
Added: php/php-src/trunk/ext/reflection/tests/traits005.phpt
===================================================================
--- php/php-src/trunk/ext/reflection/tests/traits005.phpt \
(rev 0)
+++ php/php-src/trunk/ext/reflection/tests/traits005.phpt 2010-05-30 01:00:45 UTC \
(rev 299946) @@ -0,0 +1,41 @@
+--TEST--
+ReflectionClass::getTraitAlias
+--FILE--
+<?php
+trait T1 { function m1() { } function m2() { } }
+
+class C1 { }
+class C2 { use T1; }
+class C3 { use T1 { m1 as a1; } }
+class C4 { use T1 { m1 as a1; m2 as a2; } }
+
+for ($c = "C1"; $c <= "C4"; $c++) {
+ echo "class $c:\n";
+ $r = new ReflectionClass($c);
+ var_dump($r->getTraitAliases());
+ echo "\n";
+}
+?>
+--EXPECT--
+class C1:
+array(0) {
+}
+
+class C2:
+array(0) {
+}
+
+class C3:
+array(1) {
+ ["a1"]=>
+ string(10) "(null)::m1"
+}
+
+class C4:
+array(2) {
+ ["a1"]=>
+ string(10) "(null)::m1"
+ ["a2"]=>
+ string(10) "(null)::m2"
+}
+
Property changes on: php/php-src/trunk/ext/reflection/tests/traits005.phpt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision
Added: svn:eol-style
+ native
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic