Test technique pour développeur web

Hello les amis, aujourd’hui, je vous ai préparé (en Français) svp, un petit test pour des candidats au poste de développeur web.
Si vous n’avez pas le temps de préparer vos tests, vous pouvez vous inspirer de celui-ci.
Bon courage :).

Q: Qu’est-ce-que T_PAAMAYIM_NEKUDOTAYIM?
R: C’est l’opérateur de scope de résolution (double colonne), ex: $bread::buy();

Q: Quelle est la cause de cet avertissement: ‘Warning: Cannot modify header information – headers already sent’, and what is a good practice to prevent it?
R: Un corps de message (body) a été envoyé avec ses headers pendant que d’autres headers étaient envoyés.
Solution: Envoyer les headers avant tout autre code, en s’assurant que aucun espace ou autres caractères aient été envoyés.

Q: Qu’est ce qui ne va pas dans cette requête: “SELECT * FROM table WHERE id = $_POST[ ‘id’ ]”?
R: 1. Cette requête est vulnérable aux injonctions sql. Il faut protéger d’abord les variables, en utilisant si possible des requêtes préparées (PDO).
2. Ne jamais récupérer l’intégralité des colonnes d’une table comme ceci (*), mais spécifier manuellement chaque colonne nécessaire pour des soucis de performance.

Q: Qu’est ce qui ne va pas dans cette condition: if( !strpos( $haystack, $needle ) …?
R: strpos retourne la position de l’index trouvée dans $needle, qui peut être 0. 0 équivaut à false, il convient de faire une condition aussi sur le typage comme ceci: if( false !== strpos( $haystack, $needle )…

Q: Quel est la meilleure façon d’écrire cette condition, et pourquoi?
if( 5 == $someVar ) or if( $someVar == 5 )

R: la première, car la seconde comporte des risques d’attriburt 5 à $ someVar, ce qui génèrerait une erreur.

Q: Prenons le code suivant:
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}

$a = 3;
$b = doSomething( $a );
…Quelle est la valeur de $a et $b à la fin du programme, et pourquoi?

R: $a vaut 4 et $b vaut 3. Le premier parce que $a est passé en référence, le seconf parce que $b n’est qu’une copie de $a, pas de sa référence.

Q: quelle est la différence entre public, protected et private dans la définition d’une classe?
R: public rend les embres d’une classe accessibles “partout”, protected rend les membres d’une classe accessible à la classe elle même et aux classes qui l’implémentent, private n’autorise l’accès aux membres d’une classe qu’à la classe elle même.

Q: Quelle est la différence entre include et require?
R: include renverra un warning si un fichier n’existe pas, require renverra une erreure fatale. De plusn require ne permet d’inclure que des fichiers php.

Q: Qu’est ce qui ne va pas 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
}
}

R: Les méthodes statiques n’ont simplement pas accès à $this, car une méthode statique peut être appelée sans avoir besoin d’instancier une classe.

Q: Quelle est la différence entre une interface et une classe abstraite?
R: Une interface et une classe abstraite sont tous les deux des contrats d’exécution, à la différence qu’une interface ne définit pas de comportement et impose l’héritage des ses méthodes, quand la classe abstraite permet de définir un comportement aux méthodes sans rendre obligatoire leur héritage.

Q: Comment fonctionne le protocole HTTP?
R: Le protocole Http utilise le protocole TCP/IP pour ses communications. Le client se connecte au serveur qui répond, ensuite le client demande un fichier au serveur qui le lui renvoie en réponse.

Q: Quelle est la différence entre == et === ?
R: ‘==’ vérifie l’égalité, tandis que ‘===’ vérifie l’égalité et le typage des deux variables.

Q: Expliquez pourquoi le code suivant affichera 2.5 plutôt que 3:
$a = 012;
echo $a / 4;

R: En php, quand un nombre est précédé de 0, le nombre et traité comme un nombre octal, donc sur base 8. En outre, le nombre octal 012 vaut 10 en décimal.

Q: Pourquoi faut-il désactiver la fonction register_globals?
R: Quand register_globals est à on, chaque variable transitant à travers les vatiables superglobales $_GET et $_POST sont disponibles comme des variables globales dans toute l’application.

Q  Que signifie ce symbole en php “$$”?
R: $$ signifie la variable d’une variable, exemple:
<?php
$message=”This is a string<br>”;
echo $message; //affichera “This is a string”
$message=”variable”;
$variable=”This is the second string”;
echo $$message; //affichera “This is the second string”
?>
Ici, le parser cherche la valeur de $message, qui est “variable”, il cherche donc la variable “$variable” et affiche sa valeur.

Q: Qu’est-ce-qu’un index en mysql?
R: Un index en mysql est identique à l’index d’un livre. Dans un livre sans index ou table des matières, vous devez parcourir les pages du livre une à une pour trouver l’information souhaitée, ce qui est épuisant. En revanche, retrouver une page spécifique à partir d’un index devient plus rapide, c’est le même principe.

Q: Qu’est-ce-que les contraintes mysql?
R: Je définis les contraintes comme une liste d’opérateurs servant à limiter les insertions dans une table.
Voici une liste de contrainted:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
ENUM
SET

Test technique pour développeur web