2011-09-03 19 views
8

¿Hay alguna forma de limitar la visibilidad en PHP de la misma manera que la visibilidad de "paquete" en Java o al menos la visibilidad de "amigo" en C++? ¿Cuál es la mejor práctica para mantener un gran proyecto OOP y no dejar que nadie use ninguna parte del código?PHP friend/package visibility

Utilizo visibilidad privada y protegida tanto como puedo, pero a veces no es suficiente. Sé de esta solicitud: https://bugs.php.net/bug.php?id=55331. ¿Hay algún progreso en implementar tal cosa en PHP? ¿Hay alguna solución para proteger su código (métodos, variables de clase) desde el acceso desde cualquier lugar?

+0

No exactamente como paquetes en Java, pero [espacios de nombres] (http://php.net/manual/en/language.namespaces.php) servirá para la encapsulación de código. – Shef

+0

¿Podría escribir un pequeño ejemplo, por favor? –

+0

Solo un pensamiento, si realmente lo necesita, podría usar 'debug_backtrace' [http://php.net/manual/en/function.debug-backtrace.php] para ver qué código está llamando a su código. Escritura esencial de su propio control de acceso en tiempo de ejecución. Probablemente más trabajo de lo que vale, y el 'debug_backtrace' tiene un impacto en el rendimiento. – Chris

Respuesta

3

como se ha dicho here:

No. Puede establecer una variable después de declarar un espacio de nombres, pero las variables siempre existirá en el ámbito global. Nunca están obligados a espacios de nombres. Se puede deducir que a partir de la ausencia de descripciones de resolución de nombres en http://www.php.net/manual/en/language.namespaces.faq.php

+0

Gracias por la respuesta. Howerver, aún me gustaría conocer algunas prácticas recomendadas o soluciones para lograr cierta protección de su código. –

+0

No veo cómo responde esto a la pregunta de OP. Los espacios de nombres no tienen nada que ver con la visibilidad del acceso. –

+0

@Markus Estoy de acuerdo en que esta vieja respuesta mía no la aborda explícitamente, pero dice que (al contrario que una variable) todo en cualquier espacio de nombres es global, por lo que no tienes forma de ocultar miembros usando modificadores de acceso como " privado "o" protegido ". – CodeCaster

8

Hasta hoy no hay ninguna construcción del lenguaje para limitar la visibilidad. Sin embargo, puede anotar su clase con phpDocumentor de @internal:

La etiqueta @internal se puede utilizar como contrapartida de la etiqueta @api, lo que indica que los elementos estructurales asociados se utilizan exclusivamente para el funcionamiento interno de esta pieza de software.

Depende del usuario de la API seguir esa sugerencia.