Consigue todas las sub Clases de una clase PHP -- php campo con inheritance campo con reflection camp Relacionados El problema

Get all sub classes of a class PHP


0
vote

problema

Español

Estoy buscando encontrar todas las clases que extienden a MyParentClass, para que pueda ejecutar una función estática específica en ellos.

Sé que PHP tiene una función get_declared_classes y luego podría usar __text:001C6DC0 ; -[NSWindow _windowMovedToRect:] __text:001C6DC0 __NSWindow__windowMovedToRect__ proc near ; DATA XREF: __inst_meth:00993418o __text:001C6DC0 __text:001C6DC0 var_C = dword ptr -0Ch __text:001C6DC0 arg_0 = dword ptr 8 __text:001C6DC0 arg_8 = dword ptr 10h __text:001C6DC0 arg_C = dword ptr 14h __text:001C6DC0 arg_10 = dword ptr 18h __text:001C6DC0 arg_14 = dword ptr 1Ch __text:001C6DC0 __text:001C6DC0 push ebp __text:001C6DC1 mov ebp, esp __text:001C6DC3 push esi __text:001C6DC4 push ebx __text:001C6DC5 sub esp, 30h __text:001C6DC8 call $+5 __text:001C6DCD pop ebx __text:001C6DCE mov esi, [ebp+arg_0] __text:001C6DD1 lea eax, [ebp+var_C] __text:001C6DD4 mov [esp], eax __text:001C6DD7 call _PSbuttondown __text:001C6DDC mov edx, [ebp+var_C] __text:001C6DDF test edx, edx __text:001C6DE1 jz short loc_1C6E1D __text:001C6DE3 mov eax, [esi+80h] __text:001C6DE9 or dword ptr [eax+0B8h], 1000000h __text:001C6DF3 mov eax, [ebp+arg_8] __text:001C6DF6 mov edx, [ebp+arg_C] __text:001C6DF9 mov [esp+8], eax __text:001C6DFD mov [esp+0Ch], edx __text:001C6E01 mov eax, [esi+8] __text:001C6E04 mov edx, [esi+0Ch] __text:001C6E07 mov [esp], eax __text:001C6E0A mov [esp+4], edx __text:001C6E0E call _NSEqualPoints __text:001C6E13 test al, al __text:001C6E15 jnz loc_1C6ED6 __text:001C6E1B jmp short loc_1C6E50 __text:001C6E1D ; --------------------------------------------------------------------------- __text:001C6E1D __text:001C6E1D loc_1C6E1D: ; CODE XREF: -[NSWindow _windowMovedToRect:]+21j __text:001C6E1D mov eax, [ebp+arg_8] __text:001C6E20 mov [esp+8], eax __text:001C6E24 mov eax, [ebp+arg_C] __text:001C6E27 mov [esp+0Ch], eax __text:001C6E2B mov eax, [ebp+arg_10] __text:001C6E2E mov [esp+10h], eax __text:001C6E32 mov eax, [ebp+arg_14] __text:001C6E35 mov [esp+14h], eax __text:001C6E39 mov eax, ds:(off_926DC8 - 1C6DCDh)[ebx] __text:001C6E3F mov [esp+4], eax __text:001C6E43 mov [esp], esi __text:001C6E46 call _objc_msgSend __text:001C6E4B jmp loc_1C6ED6 __text:001C6E50 ; --------------------------------------------------------------------------- __text:001C6E50 __text:001C6E50 loc_1C6E50: ; CODE XREF: -[NSWindow _windowMovedToRect:]+5Bj __text:001C6E50 mov eax, [ebp+arg_8] __text:001C6E53 mov [esp+8], eax __text:001C6E57 mov eax, [ebp+arg_C] __text:001C6E5A mov [esp+0Ch], eax __text:001C6E5E mov eax, [ebp+arg_10] __text:001C6E61 mov [esp+10h], eax __text:001C6E65 mov eax, [ebp+arg_14] __text:001C6E68 mov [esp+14h], eax __text:001C6E6C mov eax, ds:(off_91D198 - 1C6DCDh)[ebx] __text:001C6E72 mov [esp+4], eax __text:001C6E76 mov [esp], esi __text:001C6E79 call _objc_msgSend __text:001C6E7E mov eax, ds:(off_91A4B8 - 1C6DCDh)[ebx] __text:001C6E84 mov [esp+4], eax __text:001C6E88 mov eax, ds:(off_928EE8 - 1C6DCDh)[ebx] __text:001C6E8E mov [esp], eax __text:001C6E91 call _objc_msgSend __text:001C6E96 mov [esp+0Ch], esi __text:001C6E9A mov edx, ds:(_NSWindowDidMoveNotification_ptr - 1C6DCDh)[ebx] __text:001C6EA0 mov edx, [edx] __text:001C6EA2 mov [esp+8], edx __text:001C6EA6 mov edx, ds:(off_91B0DC - 1C6DCDh)[ebx] __text:001C6EAC mov [esp+4], edx __text:001C6EB0 mov [esp], eax __text:001C6EB3 call _objc_msgSend __text:001C6EB8 mov eax, ds:(_NSAccessibilityMovedNotification_ptr - 1C6DCDh)[ebx] __text:001C6EBE mov eax, [eax] __text:001C6EC0 mov [esp+8], eax __text:001C6EC4 mov eax, ds:(off_91B030 - 1C6DCDh)[ebx] __text:001C6ECA mov [esp+4], eax __text:001C6ECE mov [esp], esi __text:001C6ED1 call _objc_msgSend __text:001C6ED6 __text:001C6ED6 loc_1C6ED6: ; CODE XREF: -[NSWindow _windowMovedToRect:]+55j __text:001C6ED6 ; -[NSWindow _windowMovedToRect:]+8Bj __text:001C6ED6 add esp, 30h __text:001C6ED9 pop ebx __text:001C6EDA pop esi __text:001C6EDB leave __text:001C6EDC retn __text:001C6EDC __NSWindow__windowMovedToRect__ endp 1111 o __text:001C6DC0 ; -[NSWindow _windowMovedToRect:] __text:001C6DC0 __NSWindow__windowMovedToRect__ proc near ; DATA XREF: __inst_meth:00993418o __text:001C6DC0 __text:001C6DC0 var_C = dword ptr -0Ch __text:001C6DC0 arg_0 = dword ptr 8 __text:001C6DC0 arg_8 = dword ptr 10h __text:001C6DC0 arg_C = dword ptr 14h __text:001C6DC0 arg_10 = dword ptr 18h __text:001C6DC0 arg_14 = dword ptr 1Ch __text:001C6DC0 __text:001C6DC0 push ebp __text:001C6DC1 mov ebp, esp __text:001C6DC3 push esi __text:001C6DC4 push ebx __text:001C6DC5 sub esp, 30h __text:001C6DC8 call $+5 __text:001C6DCD pop ebx __text:001C6DCE mov esi, [ebp+arg_0] __text:001C6DD1 lea eax, [ebp+var_C] __text:001C6DD4 mov [esp], eax __text:001C6DD7 call _PSbuttondown __text:001C6DDC mov edx, [ebp+var_C] __text:001C6DDF test edx, edx __text:001C6DE1 jz short loc_1C6E1D __text:001C6DE3 mov eax, [esi+80h] __text:001C6DE9 or dword ptr [eax+0B8h], 1000000h __text:001C6DF3 mov eax, [ebp+arg_8] __text:001C6DF6 mov edx, [ebp+arg_C] __text:001C6DF9 mov [esp+8], eax __text:001C6DFD mov [esp+0Ch], edx __text:001C6E01 mov eax, [esi+8] __text:001C6E04 mov edx, [esi+0Ch] __text:001C6E07 mov [esp], eax __text:001C6E0A mov [esp+4], edx __text:001C6E0E call _NSEqualPoints __text:001C6E13 test al, al __text:001C6E15 jnz loc_1C6ED6 __text:001C6E1B jmp short loc_1C6E50 __text:001C6E1D ; --------------------------------------------------------------------------- __text:001C6E1D __text:001C6E1D loc_1C6E1D: ; CODE XREF: -[NSWindow _windowMovedToRect:]+21j __text:001C6E1D mov eax, [ebp+arg_8] __text:001C6E20 mov [esp+8], eax __text:001C6E24 mov eax, [ebp+arg_C] __text:001C6E27 mov [esp+0Ch], eax __text:001C6E2B mov eax, [ebp+arg_10] __text:001C6E2E mov [esp+10h], eax __text:001C6E32 mov eax, [ebp+arg_14] __text:001C6E35 mov [esp+14h], eax __text:001C6E39 mov eax, ds:(off_926DC8 - 1C6DCDh)[ebx] __text:001C6E3F mov [esp+4], eax __text:001C6E43 mov [esp], esi __text:001C6E46 call _objc_msgSend __text:001C6E4B jmp loc_1C6ED6 __text:001C6E50 ; --------------------------------------------------------------------------- __text:001C6E50 __text:001C6E50 loc_1C6E50: ; CODE XREF: -[NSWindow _windowMovedToRect:]+5Bj __text:001C6E50 mov eax, [ebp+arg_8] __text:001C6E53 mov [esp+8], eax __text:001C6E57 mov eax, [ebp+arg_C] __text:001C6E5A mov [esp+0Ch], eax __text:001C6E5E mov eax, [ebp+arg_10] __text:001C6E61 mov [esp+10h], eax __text:001C6E65 mov eax, [ebp+arg_14] __text:001C6E68 mov [esp+14h], eax __text:001C6E6C mov eax, ds:(off_91D198 - 1C6DCDh)[ebx] __text:001C6E72 mov [esp+4], eax __text:001C6E76 mov [esp], esi __text:001C6E79 call _objc_msgSend __text:001C6E7E mov eax, ds:(off_91A4B8 - 1C6DCDh)[ebx] __text:001C6E84 mov [esp+4], eax __text:001C6E88 mov eax, ds:(off_928EE8 - 1C6DCDh)[ebx] __text:001C6E8E mov [esp], eax __text:001C6E91 call _objc_msgSend __text:001C6E96 mov [esp+0Ch], esi __text:001C6E9A mov edx, ds:(_NSWindowDidMoveNotification_ptr - 1C6DCDh)[ebx] __text:001C6EA0 mov edx, [edx] __text:001C6EA2 mov [esp+8], edx __text:001C6EA6 mov edx, ds:(off_91B0DC - 1C6DCDh)[ebx] __text:001C6EAC mov [esp+4], edx __text:001C6EB0 mov [esp], eax __text:001C6EB3 call _objc_msgSend __text:001C6EB8 mov eax, ds:(_NSAccessibilityMovedNotification_ptr - 1C6DCDh)[ebx] __text:001C6EBE mov eax, [eax] __text:001C6EC0 mov [esp+8], eax __text:001C6EC4 mov eax, ds:(off_91B030 - 1C6DCDh)[ebx] __text:001C6ECA mov [esp+4], eax __text:001C6ECE mov [esp], esi __text:001C6ED1 call _objc_msgSend __text:001C6ED6 __text:001C6ED6 loc_1C6ED6: ; CODE XREF: -[NSWindow _windowMovedToRect:]+55j __text:001C6ED6 ; -[NSWindow _windowMovedToRect:]+8Bj __text:001C6ED6 add esp, 30h __text:001C6ED9 pop ebx __text:001C6EDA pop esi __text:001C6EDB leave __text:001C6EDC retn __text:001C6EDC __NSWindow__windowMovedToRect__ endp 2 Pero, pero mi proyecto tiene demasiadas clases para que esto se use con sensate.

Mi siguiente opción es asegurarse de que todas las clases apropiadas estén en una carpeta específica y luego marque doble con la relectura

¿Hay otra forma en que puedo hacer esto?

Original en ingles

I am looking to find all classes that extend MyParentClass, so I can run a specific static function on them.

I know php has a function get_declared_classes and i could then use instanceof or Reflection::isSubclassOf() but but my project has far too many classes for this to be used sensibly.

My next option is to make sure all the appropriate classes are in a specific folder then double check with Relection

Is there another way I can do this?

        
       
       

Lista de respuestas

1
 
vote

Desea saber qué clases de todo su CodeBase extienden una cierta clase principal. Esto no se puede conocer sin buscar todos sus archivos para definiciones de clase, luego revise todas las clases encontradas, ya sea que extiendan o no la clase principal (o extienden una clase que extiende la clase principal ...). get_declared_classes() no lo ayudará porque esta función solo listará las clases que se utilizaron durante la ejecución del código antes de llamar a esta función. No listará ninguna clase que se definen en un archivo, pero aún no se carga (automático).

Me pregunto qué estás haciendo. Usted dice que desea aplicar una función estática en ellos, ¿qué es esto exactamente? Sentí otra instancia de la Problema XY , es decir, porque cree que la búsqueda de Para todas las clases de extensión, resolverá su problema, le está preguntando que, en su lugar, debe preguntarse por el problema que lo hizo pensar.

 

You want to know which classes of your whole codebase extend a certain main class. This cannot be known without searching ALL your files for class definitions, then check all found classes whether or not they extend the main class (or extend a class that extends the main class...). get_declared_classes() will not help you because this function will only list classes that got used during the code execution before calling this function. It will not list any classes that are defined in a file, but not yet (auto)loaded.

I wonder what you are up to. You say you want to apply a static function on them - what is this exactly? I sense another instance of the X-Y-problem, i.e. because you think that searching for all extending classes will solve your problem you are asking that, but instead you should be asking about the problem that made you think so.

 
 
0
 
vote

Estoy de acuerdo con @sven Responder.

Excepto el hecho de que podría X-y problema: hay otra solución que viene a mi mente:

Puede crear y mantener el mapa de clase.

  $classes = array(  'ClassA',  'ClassB',  // '...'  );   
 

I agree with @Sven answer.

Except the fact it might X-Y problem - there is another solution which comes to my mind:

You can create and maintain the class map.

$classes = array(  'ClassA',  'ClassB',  // '...'  ); 
 
 
 
 

Relacionados problema

3  ¿Cómo contar los objetos SimpleXML que representan el elemento y el atributo?  ( How to tell apart simplexml objects representing element and attribute ) 
Necesito imprimir objetos arbitrarios simplexml de una manera específica, con un manejo especial de nodos de atributo. El problema es que los elementos y ...

2  ¿Una API de reflejos universales?  ( A universal reflections api ) 
En algún momento de vuelta estaba trabajando en un algoritmo que procesó el código, y requirió una API de reflejos. Estábamos interesados ​​en su implementaci...

0  Java: Historial de ejecución de registro como XML  ( Java logging execution history as xml ) 
Para propósitos de depuración, necesito seguir la ejecución de algún pedazo de código, dentro de una clase. Me gustaría generar un registro para todas las lla...

21  Obtener tipo de clase derivado del método estático de una base  ( Get derived class type from a bases class static method ) 
Me gustaría obtener el tipo de clase derivada de un método estático de su clase base. ¿Cómo se puede lograr esto? ¡Gracias! class BaseClass { static ...

8  Método 'xyz' no se puede reflejar  ( Method xyz cannot be reflected ) 
Hemos consumido un servicio web de terceros y está tratando de invocarlo desde una aplicación web ASP.NET. Sin embargo, cuando creo que instancia del servicio...

793  Cómo crear una nueva instancia de objeto de un tipo  ( How to create a new object instance from a type ) 
No siempre sepa el Type de un objeto en el tiempo de compilación, pero es posible que deba crear una instancia del Type . ¿Cómo obtiene una nueva instanc...

1  Obtener el constructor de un tipo de interfaz a través de la reflexión, ¿hay un mejor enfoque que el bucle a través de los tipos?  ( Getting the constructor of an interface type through reflection is there a bett ) 
He escrito un tipo genérico: IDirectorySource<T> where T : IDirectoryEntry , que estoy usando para administrar las entradas de Active Directory a través de M...

1  ¿Por qué los archivos de recursos localizados se crean automáticamente al cambiar la cultura en el diseñador?  ( Why arent the localized resource files created automatically when changing the ) 
Actualmente estoy trabajando en la localización de un formulario. Sin embargo, estoy algo confundido en cuanto a cómo lo hace correctamente. Pensé que sería...

3  ¿Hay una buena manera de obtener MethodInfo de método genérico abierto?  ( Is there a good way of getting methodinfo of open generic method ) 
Considerar tipo como este public interface IHaveGenericMethod { T1 Method<T1>(T1 parm); T2 Method<T1,T2>(T1 parm); int Method2(int parm); } ¿C...

2  Copie un atributo de una propiedad de una instancia a otra instancia (de un tipo diferente) en tiempo de ejecución  ( Copy an attribute of a property from one instance to another instance of a diff ) 
Digamos que tengo 2 clases como esta: public class Foo { [Required] public string Name {get;set;} } public class Bar { // put here [Required] at run-time...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos