Voici un test de certification type. C’est une suite de 30 exercices à réaliser en 120 minutes. Et voici quelques conseils pour y répondre et maximiser ses chances de réussite :
- Rappelez-vous que quelque soit le résultat, vous allez avoir à la fin une appréciation de votre niveau. Et le niveau « Débutant » est déjà bien car cela vous permettra de postulez à d’autres formations plus approfondi en PHP et même des postes de développeurs web sans aucun problème.
- Prenez le temps de lire les différentes questions
- Commencez par celles qui vous semblent faciles et terminez les
- Le système vous offrira, dans certains exercices, la possibilité de tester votre solution. Profitez-en.
Voici dans ce qui suit une liste d’exercices types :
SUJET 1 : SUPPRESSION HTML
Rédigez le code de la fonction removeHtml
qui reçoit en argument le paramètre $chaine.
La fonction devra retourner le paramètre en supprimant toutes les balises HTML.
Complétez le code suivant :
<?php
function removeHtml($chaine)
{
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
return $chaine
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
$string = "Hi! <script src='http://www.evilsite.com/bad_script.js'></script>It's a good day!";
removeHtml($string); // La fonction devra retourner : "Hi! It's a good day!"
SUJET 2 : ALÉATOIRE
Rédigez le code de la fonction numbersBetween
qui reçoit deux arguments $min et $max.
La fonction doit retourner un tableau avec les nombre compris entre $min et $max tous deux inclus.
Complétez le code suivant :
<?php
function numbersBetween($min, $max){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
numbersBetween(2,4); // La fonction numbersBetween retournera le tableau suivant : [2,3,4];
SUJET 3 : VALEUR RÉCURRENTE DANS UN TABLEAU
Rédigez le code de la fonction repeatFirstname
prenant en paramètre un tableau $tab de chaînes de caractères.
La fonction devra retourner la chaîne de caractère ayant le plus d’occurrence dans le tableau $tab
.
Complétez le code suivant :
<?php
function repeatFirstname($tab = []) {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
$tabFirstname = array("Julien", 'Julien', "Sebastien", "Mickael", "Simon");
repeatFirstname($tabFirstname); // La fonction retournera la valeur "Julien"
SUJET 4 : EXTRACTION DES LETTRES
Complétez le code de la fonction letters
afin qu’elle retourne un tableau de toutes les lettres du mot envoyé en paramètre $chaine
. Les lettres devront être dans l’ordre de $chaine
. Si une lettre apparaît plusieurs fois, elle apparaîtra aussi plusieurs fois dans le tableau.
Complétez le code suivant :
<?php
function numbersBetween($min, $max){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
numbersBetween(2,4); // La fonction numbersBetween retournera le tableau suivant : [2,3,4];
SUJET 5 : NAMESPACE
Complétez le code afin d’encapsuler la classe User
dans l’espace de nom Foo
.
Complétez le code suivant :
<?php
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
class User {}
SUJET 6 : FACTORY
Rédigez le code de la classe TransportFactory
.
Celle-ci devra comporter une méthode publique et statique create
prenant en paramètre une chaîne de caractères $type
.
Cette méthode devra retourner :
- une instance de la classe
Car
si$type
est égal à 1 - une instance de la classe
Motorbike
si$type
est égal à 2 false
dans tous les autres cas.
Complétez le code suivant :
<?php
class Car {}
class Motorbike {}
class TransportFactory {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 7 : VERIFICATION D’UN CODE POSTAL
Complétez le code de la fonction verificationcp
qui reçoit en argument un paramètre $chaine
.
La fonction devra retourner :
true
si$chaine
comporte un code postal (5 chiffres pouvant aller de 0 à 9) suivi du mot clef CEDEX tel que "75002 CEDEX"false
dans tous les autres cas A noter qu’il y a un espace entre le code postal et le mot clef CEDEX écrit en majuscules.
Complétez le code suivant :
<?php
function verificationCp($chaine){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
verificationcp("75002 CEDEX"); // la fonction verificationcp devra retourner true dans cet exemple
SUJET 8 : COUPER UNE CHAÎNE EN MOTS
Complétez le code de la fonction extraction
qui reçoit en argument deux paramètres $chaine
et $word
.
La fonction doit couper la chaîne $chaine
au nombre de mots $word
. Cependant, si $word
est plus important que le nombre de mot dans $chaine
, il faudra simplement retourner $chaine
.
Le paramètre $chaine
sera uniquement composé de caractères alphanumériques sans ponctuation.
Complétez le code suivant :
<?php
function extraction($chaine, $word = 50){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
echo extraction("hello world!", 1).'<BR>'; // la fonction extraction devra retourner : "hello"
echo extraction("Lorem ipsum dolor sit amet, consectetur adipiscing elit", 5).'<BR>'; // la fonction extraction devra retourner : "Lorem ipsum dolor sit amet,"
SUJET 9 : METHODE EN POO
Créez la méthode setFoo()
de la class B
prenant en argument une chaîne de caractères.
Celle-ci permettra d’attribuer la chaîne de caractères à la propriété $foo
de la class A
.
Complétez le code suivant :
<?php
class A
{
protected $foo;
}
class B extends A
{
public function getFoo()
{
return $this->foo;
}
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 10 : CONVERSION DE TYPAGE
Complétez le code de la fonction transtypage
qui reçoit en argument une chaîne de caractère $chaine
.
La fonction permet de convertir une chaîne de caractères en nombre entier. Elle devra retourner :
- la partie entière du nombre, si
$chaine
est un nombre, 0
dans tous les autres cas
Complétez le code suivant :
<?php
function transtypage($chaine){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
transtypage("Hello World!"); // La fonction retourne 0
transtypage("12.5"); // La fonction retourne 12
transtypage([12,4,8,6]); // La fonction retourne 0
SUJET 11 : IMPLÉMENTATION D’INTERFACE
Rédigez le code de la fonction hasInterface
prenant en paramètre un objet $object
.
La fonction doit retourner :
true
si l’objet$object
implémente l’interfaceFoo
false
dans tous les autres cas
Complétez le code suivant :
<?php
interface Foo{}
class User implements Foo {}
class Post implements Foo{}
class Message {}
class Media {}
function hasInterface($object) {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 12 : SUPPRESION DU DERNIER ÉLÉMENT
Rédigez le code de la fonction extractLastElement
qui reçoit en argument le paramètre $array
.
La fonction devra retourner le dernier élément du tableau $array
.
Complétez le code suivant :
<?php
function extractLastElement(Array $array)
{
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
$stack = array("Julien", "Ludovic", "Sebastien", "Mickael");
//exmple d'appel extractLastElement($stack); =>devra retourner "Mickael"
SUJET 13 : MÉTHODE EN POO
Complétez le code de la classe Library
en y ajoutant les méthodes suivantes :
addBook(Book $book)
permettant d’ajouter l’objet$book
au tableau$allBooks
de la classeLibrary
removeBook(Book $book)
permettant de supprimer l’objet$book
du tableau$allBooks
de la classeLibrary
getBooks()
permettant de retourner le tableau$allBooks
de la classeLibrary
Complétez le code suivant :
<?php
class Book {
private $title;
public function __construct($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Library {
private $allBooks = [];
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 14 : LANCER UNE EXCEPTION
Compléter le code suivant afin de lancer une exception.
Complétez le code suivant :
<?php
try {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<BR>";
}
SUJET 15 : INTERFACE EN POO
Rédigez le code d’une interface nommée InscriptionInterface
.
Celle-ci devra comporter les méthodes :
getDateCreated
setDateCreated(DateTime $datetime)
Complétez le code suivant :
<?php
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
SUJET 16 : EXPRESSION MODULAIRE
Rédigez le code de la fonction isMultipleOf
qui prend un paramètre $number
.
Celle-ci devra retourner :
- 0 si
$nombre
n’est ni un multiple de 2 ni un multiple de 5 - 1 si
$nombre
est un multiple de 2 - 2 si
$nombre
est un multiple de 5 - 3 si
$nombre
est un multiple à la fois de 2 et de 5
Complétez le code suivant :
<?php
function isMultipleOf($number) {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
isMultipleOf(2); //la fonction doit retourner 1
SUJET 17 : FUSIONNER DES CHAÎNES DE CARACTÈRE
Complétez le code de la fonction fusionner
qui reçoit en argument deux paramètres : $word
et $otherWord
.
La fonction concatène les deux paramètres en une seule chaîne de caractères où les deux paramètres sont séparés par un espace.
Complétez le code suivant :
<?php
function fusionner($word, $otherWord){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
echo fusionner('Hello', 'world!').'<br>';
SUJET 18 : EXISTENCE D’UNE CLEF
Compléter le code de la fonction existence
prenant un tableau $array
et une clef $key
en paramètre.
La fonction devra retourner :
true
si la clef$key
existe dans le tableau$array
false
dans tous les autres cas
Complétez le code suivant :
<?php
function existence($array = [], $key = ""){
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
existence(["fruit" => "banana", "color" => "green", "thing" => "spoon"], "fruit"); // return "true"
SUJET 19 : TRAITEMENT ET FONCTION DE TABLEAU
Compléter le code de la fonction switchPlaceOfElement
qui reçoit en argument le tableau $tab
.
La fonction devra retourner le tableau en modifiant la position des éléments. Le premier élément devra prendre la place du dernier et inversement.
Complétez le code suivant :
<?php
function switchPlaceOfElement($tab)
{
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
switchPlaceOfElement(["PHP", "JS", "CSS", "HTML"]); // le tableau retourné devra avoir la forme suivante : ["HTML", "JS", "CSS", "PHP"]
SUJET 20 : MÉTHODE EN POO
Compléter le code de la classe User
en y ajoutant la méthode getProperties
.
Celle-ci devra retourner un tableau associatif contenant les noms des propriétés de la classe User
en clé et les valeurs associées aux propriétés comme valeur des clés.
Les propriétés de la classe User
ont volontairement été masquées.
Complétez le code suivant :
<?php
class User {
public function __construct($firstname, $lastname) {
$this->firstname = $firstname;
$this->lastname = $lastname;
}
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 21 : CRYPTER UN MOT DE PASSE
Complétez le code de la fonction crypter
qui reçoit en argument deux paramètres $password
et $salt
.
Celle-ci permet de retourner un mot de passe hashé :
$password
sera hashé grâce à l’algorithme SHA512$salt
sera hashé grâce à l’algorithme SHA1- Le tout sera concaténé et retourné
Complétez le code suivant :
<?php
function crypter($password, $salt) {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
crypter('azerty', 'abcdefghijklmnopqrstuvwxyz0123456789');
SUJET 22 : EXISTENCE D’UN ELEMENT DANS UN TABLEAU
Compléter le code de la fonction blockIp
qui reçoit deux arguments $ip
et $blacklist
Celle-ci devra retourner :
true
si l’ip$ip
est contenue dans le tableau$blacklist
false
dans tous les autres cas
Complétez le code suivant :
<?php
function blockIp($ip, $blacklist) {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
blockIp('127.0.0.1', ["192.168.0.0.1", "127.0.0.1"]); // La fonction 'blockIp()' devra retourner true
SUJET 23 : DESIGN PATTERN SINGLETON
Rédigez le code de la classe Single
en ajoutant une méthode publique et statique getInstance
.
Vous devez implémenter le design pattern Singleton. La méthode getInstance
devra donc toujours retourner la même instance de la classe Single
.
Complétez le code suivant :
<?php
class Single {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
SUJET 24 : VÉRIFIER L’EXISTENCE D’UNE CONSTANTE
Compléter le code de la fonction isContant
ayant une chaîne de caractères $var
en paramètre.
La fonction devra retourner :
true
si$var
est une constante définiefalse
dans tous les autres cas
Complétez le code suivant :
<?php
function isContant($var = "") {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
isContant('FOO');
SUJET 25 : TRIER UN TABLEAU SUR UNE COLONNE
Rédigez le code de la fonction sortByAverage
prenant en paramètre un tableau $tab
.
La fonction devra retourner le tableau $tab
trié sur la colonne average du plus grand au plus petit.
Complétez le code suivant :
<?php
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//Do not change the function "sortByAverage" below
function sortByAverage($tab = []) {
}
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
$records =
[
[
'firstname' => 'Boyer',
'average' => 10
],
[
'firstname' => 'Ludovic',
'average' => 15
],
[
'firstname' => 'Thomas',
'average' => 5
],
];
sortByAverage($records);
SUJET 26 : HÉRITAGE POO
Rédigez le code de la classe B
héritant de la classe A
.
Réécrivez la méthode printPHP
de la classe A
dans la classe B
afin de retourner : "My father says : [contenu du print de A]"
. Vous devez utiliser le contenu
de la méthode printPHP
de la classe A
afin d’écrire cette nouvelle phrase.
Complétez le code suivant :
<?php
class A
{
public static $text = "PHP";
public function printPHP()
{
return self::$text.' is good';
}
}
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
SUJET 27 : CONVERSION CHAINE EN FLOAT
Rédigez le code de la fonction conversionToFloat
prenant en paramètre la variable $chaine
.
La fonction devra retourner $chaine
converti en float
Complétez le code suivant :
<?php
function conversionToFloat($chaine = "") {
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
conversionToFloat("12.5"); //return 12.5
conversionToFloat("lorem"); //return 0
SUJET 28 : ENCODAGE JSON
Rédigez le code de la fonction jsonEncodeArray
qui reçoit en argument le paramètre $array
.
La fonction devra retourner le tableau au format JSON.
Complétez le code suivant :
<?php
function jsonEncodeArray(Array $array)
{
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
$myvar = array(
'hello',
42,
array(1,'two'),
'apple',
rand(),
[rand(),rand(),rand(),rand(),rand()]
);
SUJET 29 : VÉRIFICATION D’UN TWEET
Complétez le code de la fonction isATweet()
qui reçoit en argument $chaine
.
La fonction analyse si la chaîne de caractères est un Tweet. Elle devra retourner :
true
si le tweet contient moins de 140 caractères et qu’il inclut au moins un hashtag(#) ou une mention de compte(@).false
dans tous les autres cas.
Complétez le code suivant :
<?php
function isATweet($chaine)
{
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
}
isATweet("Php is so cool #certification"); // isATweet devra retourner "true" dans cet exemple
SUJET 30 : TYPAGE – CRÉATION FONCTION
Rédigez le code de la fonction displayInfo
. Celle-ci prendra deux arguments dans l’ordre ci-dessous :
- Un tableau
- Un objet de la classe
Exception
Complétez le code suivant :
<?php
//----------NE MODIFIEZ PAS LE CODE AU DESSUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
//----------NE MODIFIEZ PAS LE CODE EN DESSOUS DE CETTE LIGNE, IL SERA REINITIALISE LORS DE l'EXECUTION----------
Soyez le premier à commenter