Pregunta Preguntas que cada buen desarrollador de PHP debería poder responder [cerrado]


Estaba pasando por Preguntas a cada buen desarrollador de .Net debería ser capaz de responder y quedé muy impresionado con el contenido y el enfoque de esta pregunta, y en el mismo espíritu, estoy haciendo esta pregunta para el Desarrollador de PHP.

Qué preguntas ¿Crees que debería ser un buen Programador de PHP ser capaz de responder?

EDITAR : Estoy marcando esta pregunta como wiki de la comunidad, ya que no es específico del usuario y tiene como objetivo servir a la comunidad de programación en general.

Esperando respuestas sorprendentes.

NOTA : Responda las preguntas también como se sugiere en los comentarios para que las personas también puedan aprender algo nuevo sobre el idioma.


75


origen


Respuestas:


Es cierto que robé esta pregunta de otro lado (no recuerdo dónde la leí más) pero pensé que era divertida:

P: Que es T_PAAMAYIM_NEKUDOTAYIM?
UN: Es el operador de resolución de alcance (doble colon)

Un PHP'er experimentado sabe inmediatamente lo que significa. Los desarrolladores menos experimentados (y no hebreos) pueden querer leer esta.

Pero preguntas más serias ahora:


P: ¿Cuál es la causa de esta advertencia: 'Advertencia: no se puede modificar la información del encabezado - cabeceras ya enviadas', y ¿cuál es una buena práctica para evitarlo?
UN:  Porque: los datos del cuerpo se enviaron, lo que provocó que se enviaran los encabezados también.
Prevención: Asegúrese de ejecutar primero el código específico del encabezado antes de generar cualquier información del cuerpo. Asegúrese de no haber enviado accidentalmente espacios en blanco u otros caracteres.


P: Qué está mal con esta consulta: "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
UN:  1. Es vulnerable a la inyección SQL. Nunca use la entrada del usuario directamente en las consultas. Desinfecte primero. Preferiblemente use declaraciones preparadas (DOP) 2. No seleccione todas las columnas (*), pero especifique cada columna individual. Esto es predominantemente para evitar que las consultas acaparen la memoria cuando, por ejemplo, se agrega una columna BLOB en algún momento en el futuro.


P: ¿Qué está mal con esta declaración if: if( !strpos( $haystack, $needle ) ...?
UN:  strpos devuelve la posición del índice donde encontró la aguja $, lo que podría ser 0. Ya que 0 también resuelve a false la solución es usar una comparación estricta: if( false !== strpos( $haystack, $needle )...


P: ¿Cuál es la forma preferida de escribir esta declaración si y por qué?
if( 5 == $someVar ) o if( $someVar == 5 )
UN: El primero, ya que evita la asignación accidental de 5 a $ algunosVar cuando se olvida de usar 2 signos iguales ($someVar = 5), y causará un error, este último no.


P: Dado este código:

function doSomething( &$arg )
{
    $return = $arg;
    $arg += 1;
    return $return;
}

$a = 3;
$b = doSomething( $a );

... ¿cuál es el valor de $a y $b después de la llamada a la función y por qué?
UN:  $a es 4 y $b es 3. El primero porque $ arg se pasa por referencia, el último porque el valor de retorno de la función es una copia (no una referencia) del valor inicial del argumento.


OOP específico

P: Cuál es la diferencia entre public, protected y private en una definición de clase?
UN:  public hace que un miembro de la clase esté disponible para "todos", protectedhace que el miembro de la clase esté disponible solo para sí mismo y las clases derivadas, private hace que el miembro de la clase solo esté disponible para la clase en sí.


P: Qué está mal con este código:

class SomeClass
{
    protected $_someMember;

    public function __construct()
    {
        $this->_someMember = 1;
    }

    public static function getSomethingStatic()
    {
        return $this->_someMember * 5; // here's the catch
    }
}

UN: Los métodos estáticos no tienen acceso a $ this, porque los métodos estáticos se pueden ejecutar sin instanciar una clase.


P: ¿Cuál es la diferencia entre una interfaz y una clase abstracta?
UN: Una interfaz define un contrato entre una clase implementadora y un objeto que llama a la interfaz. Una clase abstracta define previamente cierto comportamiento para las clases que lo extenderán. Hasta cierto punto esto también puede considerarse un contrato, ya que garantiza la existencia de ciertos métodos.


P: ¿Qué hay de malo con las clases que definen predominantemente getters y setters, que se asignan directamente a sus miembros internos, sin tener realmente métodos que ejecuten el comportamiento?
UN: Esto podría ser un olor de código ya que el objeto actúa como una matriz ennoblecida, sin otro uso.


P: ¿Por qué la implementación de PHP del uso de interfaces es subóptima?
UN: PHP no le permite definir el tipo de retorno esperado del método, lo que esencialmente hace que las interfaces sean bastante inútiles. :-PAG


50



Definitivamente preguntas de seguridad!

(Las respuestas simples en esta publicación, por supuesto, proteger las aplicaciones web de php son mucho más complejas)

  • cómo lidiar con la inyección SQL?

mysql_real_escape_string () para comenzar con MySQL. Luego intente aprender PDO para aprovechar las declaraciones preparadas y la portabilidad entre los proveedores de bases de datos.

  • ¿Cómo lidiar con CSRF (Falsificación de solicitudes entre sitios)?

Agregue un token en cada solicitud importante para asegurar operaciones importantes (el usuario debe haber visto el formulario antes de enviar la solicitud crucial).

  • cómo tratar XSS (Cross-Site Scripting) reflejado y almacenado?

htmlentities () es bueno para empezar.

  • variante de inyecciones XXX: inyección LDAP, inyección XPath, etc ...?

Necesita saber cuál es el "vocabulario" utilizado por XXX y luego deducir lo que necesita desinfectar y / o "verificar y rechazar".

  • ¿Cuál es la lista de funciones sensatas?

Funciones que interpretan código PHP (posiblemente incluido en un archivo remoto) o que ejecutan comandos en su sistema. Una lista corta e incompleta podría ser: exec (), passthru (), system (), popen (), eval (), preg_replace () ...

  • cómo lidiar con los peligros de inclusión de archivos?
  • ¿Qué es un camino transversal?
  • ¿Cuáles son los riesgos asociados con la carga de archivos?

Necesita una verificación cuidadosa de los parámetros utilizados al abrir archivos o recursos remotos.

  • cómo hacer cumplir la configuración de su configuración de PHP (es decir, ¿sabe cuál es el uso de php.ini)?

Va a ser largo, así que omito la respuesta, por favor lea el manual de PHP.

  • sobre el filtrado de datos de usuario: ¿cuál es la diferencia entre desinfección y comprobar y rechazar ?

El primero transforma la entrada en algo menos hostil. El segundo revisa si la entrada es correcta y, si no la rechazas.


24



"¿Por qué no estás usando algo más?"

Lo siento, alguien tuvo que decirlo :)


14



Es php cross-browser?

(Lo sé, esto hará reír a mucha gente, ¡pero es la pregunta más hecha en los foros de php!)


12



Creo que una buena pregunta sería: ¿Cómo funciona HTTP? Trabajando con GET y POST los datos entre otras comunicaciones HTTP son inherentes al desarrollo de PHP. Comprender cómo funciona HTTP en un contexto más amplio y cómo PHP implementa esto recorre un largo camino.


11



¿Cuál es la diferencia entre == y === y por qué te gustaría usar == en absoluto?


9



Explica por qué se muestra el siguiente código 2.5 en lugar de 3:

$a = 012;
echo $a / 4;

Responder: Cuando un número está precedido por un 0 en PHP, el número se trata como un octal número (base-8). Por lo tanto, el número octal 012 es igual al número decimal 10.


9



Nadie lo tocó todavía, pero es algo que todo desarrollador de PHP debería poder hablar extensamente: ¿Por qué? register_globals ¿malo?


8