Programmation Orientée Objet en language PHP
Peut-on avoir dans un même namespace deux constantes ou deux fonctions ou deux classes ou deux interfaces de même nom?
Non
Où et comment se fait la déclaration d'un namespace?
Peut-on avoir juste un seul chiffre comme nom de namespace?
Non
Il faut qu'il commence par une lettre.
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?
Ou
Peut-on dans un même fichier mélanger la déclaration de namespace avec accolades et sans accolades?
Non
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"
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;
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;
?
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
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
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.
Une classe qui possède un "fully qualified class name" doit-elle avoir un top level namespace aussi appelé "vendor name"?
Oui
Est-il vrai qu'à tout "fully qualified class name" doit correspondre un nom de classe?
Oui
Est-il vrai que l'underscore n'a aucune signification dans un "fully qualified class name"?
Vrai
Est-il vrai que l'on peut utiliser les lower et le upper cases dans un "fully qualifed class name"?
Vrai
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)