75 votes

Questions que tout bon développeur PHP devrait être en mesure de répondre

J'ai été en passant par des Questions tout bon .Net développeur doit être capable de répondre et a été très impressionné par le contenu et l'approche de cette question et, donc, dans le même esprit, je vous pose cette question pour les Développeurs PHP.

Quelles sont les questions que pensez-vous d'un bon programmeur PHP, être en mesure de répondre?

EDIT : je suis marquage de cette question wiki de la communauté comme il n'est pas spécifique à l'utilisateur, et qu'elle vise à servir de programmation de la communauté au sens large.

À la recherche des réponses étonnantes.

REMARQUE : Veuillez répondre à des questions aussi, comme suggéré dans les commentaires afin que les gens puissent apprendre quelque chose de nouveau trop au sujet de la langue.

50voto

Decent Dabbler Points 10829

Certes, je l'ai volé à cette question à partir de quelque part d'autre (ne me souviens pas où je l'ai lu plus), mais que c'était drôle:

Q: Qu'est - T_PAAMAYIM_NEKUDOTAYIM?
Un: Son de l'opérateur de résolution de portée (deux points)

Expérimenté en PHP er sait immédiatement ce que cela signifie. Moins connu (et pas l'hébreu) les développeurs voudrez peut-être lire ceci.

Mais des questions plus sérieuses maintenant:


Q: Quelle est la cause de cette mise en garde: 'Warning: Cannot modify header information - headers already sent" et ce qu'est une bonne pratique pour l'empêcher?
Un: *Cause:* les données du corps a été envoyé, causant des en-têtes envoyés trop.
Prévention: assurez-vous d'exécuter en-tête code spécifique en premier avant de sortir n'importe quel corps de données. Assurez-vous que vous n'avez pas accidentellement envoyé des espaces ou d'autres caractères.


Q: Quel est le problème avec cette requête: "SELECT * FROM table WHERE id = $_POST[ 'id' ]"?
A: 1. Il est vulnarable à injection SQL. Ne jamais utiliser la saisie de l'utilisateur directement dans les requêtes. Désinfecter le premier. Preferebly utiliser des requêtes préparées (AOP) 2. Ne pas sélectionner toutes les colonnes (*), mais de spécifier chaque colonne. C'est principalement ment pour éviter que les requêtes ne monopolisant la mémoire lorsque, par exemple, une colonne BLOB est ajouté à un certain moment dans l'avenir.


Q: Quel est le problème avec cette instruction if: if( !strpos( $haystack, $needle ) ...?
R: strpos renvoie la position d'index de l'endroit où il trouve d'abord l' $de l'aiguille, ce qui pourrait être 0. Depuis 0 correspond à false la solution est d'utiliser une comparaison stricte: if( false !== strpos( $haystack, $needle )...


Q: Quel est le meilleur moyen d'écrire cette instruction si, et pourquoi?
if( 5 == $someVar ) ou if( $someVar == 5 )
Un: L'ancien, car il prévient la cession de 5 à $someVar lorsque vous oubliez d'utiliser 2 equalsigns ($someVar = 5), et provoquera une erreur, ce dernier ne sera pas.


Q: étant Donné ce code:

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

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

...quelle est la valeur de $a et $b après l'appel de fonction et pourquoi?
R: $a est 4 et $b est 3. L'ancien parce que $arg est passé par référence, la dernière parce que la valeur de retour de la fonction est une copie (pas une référence à) la valeur initiale de l'argument.


La programmation orientée objet spécifique

Q: Quelle est la différence entre public, protected et private dans une définition de classe?
R: public fait un membre de la classe pour "tout le monde", protected rend le membre de la classe à la disposition de lui-même et les classes dérivées, private rend le membre de la classe disponible uniquement à la classe elle-même.


Q: Quel est le problème avec ce code:

class SomeClass
{
    protected $_someMember;

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

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

Un: méthodes Statiques n'ont pas accès à $ce, parce que les méthodes statiques ne peuvent être exécutés sans l'instanciation d'une classe.


Q: Quelle est la différence entre une interface et une classe abstraite?
Un: Une interface définit un contrat entre une application de classe et un objet qui appelle l'interface. Une classe abstraite pré-définit un certain comportement pour les classes qui le prolongera. Dans une certaine mesure cela peut aussi être considéré comme un contrat, puisqu'il assure certaines méthodes d'exister.


Q: Quel est le problème avec les classes qui essentiellement définir les getters et les setters, que la carte droit interne des membres, sans avoir réellement méthodes d'exécuter le comportement?
R: Cela peut être une odeur de code, puisque l'objet agit comme un anobli tableau, sans beaucoup d'autres de l'utiliser.


Q: Pourquoi est-PHP de mise en œuvre de l'utilisation des interfaces sous-optimale?
Un: PHP ne permet pas de définir le type de retour attendu de la méthode, ce qui rend essentiellement des interfaces assez inutile. :-P

24voto

Kartoch Points 2145

Définitivement les questions de sécurité !

(réponses simples dans ce post, bien sûr, la sécurisation des applications web en php est beaucoup plus complexe)

  • la façon de traiter avec injection SQL ?

mysql_real_escape_string() pour commencer avec MySQL. Ensuite, essayez d'en apprendre PDO pour profiter de déclarations préparées à l'avance et la portabilité à travers la base de données des fournisseurs.

  • la façon de traiter avec CSRF (Cross-Site Request Forgery) ?

Ajouter un jeton sur chaque importante de demande d'obtenir d'importantes opérations (l'utilisateur doit avoir vu le formulaire avant l'envoi de la crucial demande).?

  • comment traiter les attaques de type XSS (Cross-Site Scripting) reflète et stockées ?

htmlentities() est bon pour un début.

  • variante de XXX injections: LDAP injection, injection XPath, etc... ?

Vous avez besoin de savoir quel est le "vocabulaire" utilisé par le XXX et puis déduire ce que vous avez besoin de désinfecter et/ou "check-et-rejeter".

  • qu'est-ce que la liste de sensible fonctions ?

Fonctions d'interpréter le code PHP (éventuellement inclus dans un fichier distant) ou qui exécute la commande sur votre système. Une courte et incomplète liste pourrait être: exec(), passthru(), system(), popen(), la fonction eval(), preg_replace()...

  • la façon de traiter avec l'inclusion de fichiers dangers ?
  • qu'est ce qu'un chemin transversal ?
  • quels sont les risques associés à l'upload de fichier ?

Ont besoin d'être soigneusement vérifier les paramètres utilisés lors de l'ouverture de fichiers ou à des ressources distantes.

  • comment faire pour appliquer la configuration de votre configuration de PHP (c'est à dire vous savez ce qui est de l'utilisation de php.ini) ?

Il va être long j'ai donc ignorer la réponse, veuillez lire le manuel PHP.

  • sur le filtrage des données de l'utilisateur: quelle est la différence entre la désinfection et de contrôle et refuser ?

Le premier transforme l'entrée dans quelque chose de moins hostile. Le second vérifier si l'entrée est correcte et, si pas le refuser.

14voto

kprobst Points 8360

« Pourquoi ne sont pas en utilisant quelque chose d’autre ? »

Désolé, qu'il fallait quelqu'un pour dire  :)

12voto

Strae Points 6032

Est php cross-browser ?

(je sais, cela va faire rire beaucoup de gens, mais la question plus posées sur les forums de php !)

11voto

bkildow Points 2218

Je pense qu’une bonne question serait : Comment fonctionne HTTP ? Travailler avec et des données entre autres communications HTTP est inhérente au développement PHP. Comprendre comment HTTP fonctionne dans un contexte plus large et comment PHP implémente cela va un long chemin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X