Req #64514 [Opn]: Traits - ask for get_trait_methods
| From: | namarpi at yahoo dot com | Date: | Tue, 26 Mar 2013 09:04:22 +0000 |
| Subject: | Req #64514 [Opn]: Traits - ask for get_trait_methods | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-178103@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64514&edit=1
ID: 64514
User updated by: namarpi at yahoo dot com
Reported by: namarpi at yahoo dot com
Summary: Traits - ask for get_trait_methods
Status: Open
Type: Feature/Change Request
Package: Class/Object related
Operating System: Irrelevant
PHP Version: 5.4.13
Block user comment: N
Private report: N
New Comment:
Thank you for the hint, but it leads me to complete the example a little bit.
The problem is the method name conflict and the absence of possibility of resolving
them dynamically (or, I do not know the know-how).
Please have a look at the new example which contains three files:
My_Class, My_Trait_Admin, My_Trait_Front.
https://github.com/NaMarPi/php-reports/blob/master/trait_conflict_resolution.php
Previous Comments:
------------------------------------------------------------------------
[2013-03-26 08:02:07] laruence@php.net
you may want to see: http://php.net/manual/en/function.class-uses.php
and works like: get_class_methods(current(class_uses("My_Class")));
------------------------------------------------------------------------
[2013-03-26 06:53:28] namarpi at yahoo dot com
The aim is not to bother My_Class with plenty of methods, I can pick up them, and put them into a
separate My_Trait file. And, the other advantage is that the user do not need to dig into the
My_Class, it is enough him/her to know the more simpler My_Trait.
------------------------------------------------------------------------
[2013-03-26 05:08:02] namarpi at yahoo dot com
It is a WordPress example, and I am already using the New solution:
// Old solution:
class My_Class {
function method() {
[...]
foreach( $things as $index => $thing ) {
call_user_func_array(
array( $this, $thing ),
array( $arg1, $arg2, $arg3 )
);
}
[...]
}
}
-------------------------------------------------------------------------------------------
// New solution:
class My_Class {
function __construct() {
[...]
$trait_methods = get_class_methods( 'My_Trait' );
foreach( $trait_methods as $trait_method ) {
add_action( "id/$trait_method", array( 'My_Trait',
"$trait_method" ), 5, 3 );
}
[...]
}
}
------------------------------------------------------------------------
[2013-03-26 03:59:55] laruence@php.net
could you please show us a real usage for this?
------------------------------------------------------------------------
[2013-03-25 17:27:46] namarpi at yahoo dot com
Description:
------------
---
From manual page: http://www.php.net/language.oop5.traits
---
I would like to ask for a method which should be called get_trait_methods, and acts like the
get_class_methods.
Test script:
---------------
// file1.php
trait My_Trait {
function trait_method_1() {}
function trait_method_2() {}
}
// file2.php
class My_Class {
use My_Trait;
function class_method_1() {
$trait_methods = get_class_methods( 'My_Trait' ); // <-- get_trait_methods
print_r( $trait_methods );
}
function class_method_2() {}
}
$my_object = new My_Class();
$my_object->class_method_1();
Expected result:
----------------
Array
(
[0] => trait_method_1
[1] => trait_method_2
)
Actual result:
--------------
Recently get_class_methods does this job.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64514&edit=1