Détails du sujet

PHP POO [Quiz 2] [Pile 3]

Programmation Orientée Objet en language PHP

Toutes les cartes

Peut-on avoir dans un même namespace deux constantes ou deux fonctions ou deux classes ou deux interfaces de même nom?

Non


  1. En PHP les namespaces sont-ils case-insensitive?
  2. D'aprés la recommandation PSR-4:Autoloader, les namespaces sont-ils case-sensitive si on utilise l'autoload?
  1. Oui
  2. Oui

Où et comment se fait la déclaration d'un namespace?

  • Au début d'un fichier
  • Utilisation de la commande "namespace" suivi du nom du namespace.
    <?php namespace toto;
  • Pas de code non-PHP (HTML) avant la déclaration de namespace.
  • Seul le mot-clé "déclare' peut précéder un namespace pour définir l'encodage du fichier source.

Peut-on avoir juste un seul chiffre comme nom de namespace?

Non

Il faut qu'il commence par une lettre.

  • v8 est accepté.
  • 8v n'est pas accepté.

 

 


D'aprés la PSR-4:Autoloader,

qu'est-ce qu'un "Fully Qualified Class Name" (FQCN)?

FQCN = full namespace + class name


Le même nom de namespace peut-il être déclaré dans plusieurs fichiers différents?

Oui

Cela permet de scinder le contenu d'un espace de nom sur plusieurs fichiers.


Comment faire pour définir une constante avec le mot-clé "define" afin que la constante n'appartienne pas au namespace globale mais au namespace que l'on souhaite?

Il faut faire précéder le nom de la constante par le namespace que l'on souhaite.


A quel namespace appartient la constante HELLO?

Au namespace globale et pas au namespace toto car toto ne précède pas la constante lors de sa déclaration avec define().


Peut-on mettre des commentaires avant la déclaration d'un namespace en début de fichier?

Oui


Est-il vrai qu'il ne faut pas utiliser les mots-clés PHP dans les noms de namespace?

Vrai


A quel namespace appartient la constante HELLO?

Au namespace toto


Si la constante ou fonction (non qualifiée) que l'on appel dans notre namespace n'existe pas, dans quel namespace PHP va-t-il chercher?

Le namespace globale.


Si la classe que l'on appel dans notre namespace n'existe pas, que fait PHP?

PHP lève une erreur.

Il ne va pas chercher la classe dans le namespace globale.


Lors de la déclaration de constante, quelle est la différence en terme de namespace entre le mot-clé "const" et "define"?

Avec "const" le namespace est par défaut celui dans lequel la déclaration est faite.

Avec "define", par défaut le namespace est globale.


Peut-on déclarer plusieurs namespace dans un même fichier?

Oui, mais cela n'est pas recommendé.


Peut-on déclarer des sous-namespace (sub-namespace)?

Oui


Quelles sont les deux méthodes pour déclarer un namespace dans un fichier?

Avec ou sans accolades
  • namespace toto;

Ou

  • namespace toto {}

Quel namespace pour $c?
  • namespace toto pour $a
  • namespace titi pour $b
  • namespace gobale pour $c

Peut-on dans un même fichier mélanger la déclaration de namespace avec accolades et sans accolades?

Non


Que s'affiche-t-il?
  • THREE
  • THREE
  • THREE
  • THREE

Si on choisit de définir un namespace dans des accolades quel est le seul code que l'on peut écrire en dehors?

Une déclaration utilisant le mot-clé "define"


NameSpace

Quels sont les 3 qualifications de nom différentes qui permettent d'accéder à une constante, fonction, classe ou interface?

En utilisant son:

(1) Nom sans qualificatif (Unqualified name)

MaClasse;

(2) Nom qualifié (Qualified name)

MonNameSpace\MaClasse;

(3) Non absolu (Fully qualified name)

\MonNameSpace\MaClasse;


Qualifiez les lignes 4,7,11?

Ligne 4: Nom non qualifié (non qualified)

Ligne 7: Nom qualifié (qualified)

Ligne 11: Nom Absolue (fully qualified)

 


Que contient la constante magique

__NAMESPACE__

?

Le nom du NameSpace courant ou une chaine vide si on est dans le NameSpace globale.


Peut-on utiliser la constante __NAMESPACE__  pour construire dynamiquement des noms, tels que :

$classe = __NAMESPACE__ . '\\' . 'MaClasse';

Oui


Quelle commande équivalente à self, peut-on utiliser dans une classe pour appeler sa méthode toto()?

La commande namespace.

namespace\toto();

équivaut à

self::toto();


Combien de sous-NameSpace peut-on ajouter à un NameSpace?

Une infinité.


Comment créer le sous-namespace B du namespace A?


Qu'affiche l'echo?

A\B


Si la classe A n'existe pas sera-t-elle créée si l'on écrit la ligne suivante?

Oui

Le namespace A et le namespace A\B seront crées.


Lorsque l'on déclare le namespace suivant peut-on dire que le namespace B existe?

Non, le namespace B n'existe pas à proprement parlé.

C'est le namespace A\B qui existe car pour spécifier un namespace on part toujours du namespace racine et on liste les sous-namespaces.

Le namespace A\B existe.


Lorsqu'un namespace est trés long et que l'on souhaite l'utiliser, comment faire pour réduire son nom?

On crée un alias avec le mot-clé "as"

 

use A\B\C\D\E\F\G\H as toto;

toto est l'alias.


Avec le mot-clé "use", peut-on créer un alias à partir d'un long namespace, sans utiliser le mot-clé "as"?

Oui mais dans ce cas l'alias est le dernier namespace du long namespace.

use A\B\C\D\E\F\G\H;

H est l'alias.


Peut-on écrire

use A\B\C as toto, W\X\Y as titi;

?

Création de deux alias

Oui


Ecrire le code qui vous permet:

(1) d'utiliser un fichier "fichier1.php"

(2) d'importer sa classe "Personnage" située dans son namespace "A\B\C"

(3) de créer une instance $obj de Personnage

Importation de classe avec \"use\"

Ecrire le code qui permet:

1- D'utiliser un fichier "fichier1.php"

2- D'importer sa classe "Personnage" située dans son namespace "A\B\C" et de créer son alias "toto";

3- De créer une instance $obj de Personnage


PSR-4:Autoloader

Une classe définie de manière absolue (fully qualified),

peut-elle avoir un ou plusieurs sous-namespaces?

Oui, ce n'est pas une obligation.


PSR-4:Autoloader

Une classe qui possède un "fully qualified class name" doit-elle avoir un top level namespace aussi appelé "vendor name"?

Oui


PSR-4:Autoloader

Est-il vrai qu'à tout "fully qualified class name" doit correspondre un nom de classe?

Oui


PSR-4:Autoloader

Est-il vrai que l'underscore n'a aucune signification dans un "fully qualified class name"?

Vrai


PSR-4:Autoloader

Est-il vrai que l'on peut utiliser les lower et le upper cases dans un "fully qualifed class name"?

Vrai


PSR-4:Autoloader

Les noms des classes doivent-elles être sensibles aux minuscules et aux majuscules pendant l'autoloading?

Oui


Le nom du fichier.php qui contient la classe doit-il avoir le même nom que la classe (case sensitive) lors de l'autoloading?

Oui


Dans quel cas uniquement, peut-on utiliser l'instruction declare() lorsqu'elle est utilisée avant une déclaration de namespace?

Pour définir uniquement le type d'encodage de la page.


Depuis PHP 5.3, qu'est-ce qui permet de cloisoner des constantes, fonctions, classes, traits au sein d'un même espace afin d'éviter la collision de nomage avec d'autres?

L'utilisation des espaces de noms (NameSpace)