[{"data":1,"prerenderedAt":1179},["ShallowReactive",2],{"page-\u002Fphp\u002Ffonctions-et-objets":3,"pieces-php":1136,"autour-\u002Fphp\u002Ffonctions-et-objets":1161,"prerequis-\u002Fphp\u002Ffonctions-et-objets":1166,"plan-php":1168},{"id":4,"title":5,"body":6,"description":1105,"extension":1106,"ligne":57,"meta":1107,"motsCles":1108,"navigation":182,"niveau":1109,"path":1110,"prerequis":1111,"ressources":1113,"seo":1125,"sources":1126,"stem":1134,"__hash__":1135},"docs\u002Fphp\u002F04.fonctions-et-objets.md","Fonctions et objets",{"type":7,"value":8,"toc":1094},"minimark",[9,14,32,36,52,204,218,222,228,309,393,399,401,411,414,489,496,506,510,528,686,704,708,719,791,797,801,818,893,904,908,920,975,982,1030,1039,1043,1090],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,26,29],"ul",{},[18,19,20,21,25],"li",{},"Écrire une fonction avec des types de paramètres et de retour, et activer ",[22,23,24],"code",{},"strict_types",".",[18,27,28],{},"Créer une classe avec un constructeur à promotion de propriétés.",[18,30,31],{},"Ranger tes classes dans un espace de noms.",[10,33,35],{"id":34},"une-fonction","Une fonction",[37,38,39,40,44,45,48,49,25],"p",{},"Une ",[41,42,43],"strong",{},"fonction"," regroupe du code réutilisable sous un nom. Elle reçoit des ",[41,46,47],{},"paramètres"," et peut renvoyer un résultat avec ",[22,50,51],{},"return",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-php shiki shiki-themes github-light-default github-dark-default github-dark-default","\u003C?php\nfunction formaterDuree(int $minutes): string\n{\n    $heures = intdiv($minutes, 60);\n    $reste = $minutes % 60;\n    return \"{$heures} h {$reste} min\";\n}\n\necho formaterDuree(75); \u002F\u002F 1 h 15 min\n","php","",[22,60,61,74,100,106,127,147,171,177,184],{"__ignoreMap":58},[62,63,66,70],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"sOnC1","\u003C?",[62,71,73],{"class":72},"s5iOY","php\n",[62,75,77,80,84,88,91,94,97],{"class":64,"line":76},2,[62,78,79],{"class":68},"function",[62,81,83],{"class":82},"syCW7"," formaterDuree",[62,85,87],{"class":86},"scfrF","(",[62,89,90],{"class":68},"int",[62,92,93],{"class":86}," $minutes)",[62,95,96],{"class":68},":",[62,98,99],{"class":68}," string\n",[62,101,103],{"class":64,"line":102},3,[62,104,105],{"class":86},"{\n",[62,107,109,112,115,118,121,124],{"class":64,"line":108},4,[62,110,111],{"class":86},"    $heures ",[62,113,114],{"class":68},"=",[62,116,117],{"class":72}," intdiv",[62,119,120],{"class":86},"($minutes, ",[62,122,123],{"class":72},"60",[62,125,126],{"class":86},");\n",[62,128,130,133,135,138,141,144],{"class":64,"line":129},5,[62,131,132],{"class":86},"    $reste ",[62,134,114],{"class":68},[62,136,137],{"class":86}," $minutes ",[62,139,140],{"class":68},"%",[62,142,143],{"class":72}," 60",[62,145,146],{"class":86},";\n",[62,148,150,153,157,160,163,166,169],{"class":64,"line":149},6,[62,151,152],{"class":68},"    return",[62,154,156],{"class":155},"shWOn"," \"{",[62,158,159],{"class":86},"$heures",[62,161,162],{"class":155},"} h {",[62,164,165],{"class":86},"$reste",[62,167,168],{"class":155},"} min\"",[62,170,146],{"class":86},[62,172,174],{"class":64,"line":173},7,[62,175,176],{"class":86},"}\n",[62,178,180],{"class":64,"line":179},8,[62,181,183],{"emptyLinePlaceholder":182},true,"\n",[62,185,187,190,192,194,197,200],{"class":64,"line":186},9,[62,188,189],{"class":72},"echo",[62,191,83],{"class":82},[62,193,87],{"class":86},[62,195,196],{"class":72},"75",[62,198,199],{"class":86},"); ",[62,201,203],{"class":202},"sd6ml","\u002F\u002F 1 h 15 min\n",[37,205,206,207,210,211,213,214,217],{},"Dans ",[22,208,209],{},"int $minutes",", ",[22,212,90],{}," est le type attendu du paramètre. Après les parenthèses, ",[22,215,216],{},": string"," indique le type de la valeur renvoyée.",[10,219,221],{"id":220},"les-déclarations-de-type","Les déclarations de type",[37,223,39,224,227],{},[41,225,226],{},"déclaration de type"," dit à PHP ce que la fonction accepte et renvoie. Voici les formes courantes.",[229,230,231,244],"table",{},[232,233,234],"thead",{},[235,236,237,241],"tr",{},[238,239,240],"th",{},"Écriture",[238,242,243],{},"Sens",[245,246,247,266,276,289,299],"tbody",{},[235,248,249,263],{},[250,251,252,210,254,210,257,210,260],"td",{},[22,253,90],{},[22,255,256],{},"string",[22,258,259],{},"float",[22,261,262],{},"bool",[250,264,265],{},"un type simple",[235,267,268,273],{},[250,269,270],{},[22,271,272],{},"array",[250,274,275],{},"un tableau",[235,277,278,283],{},[250,279,280],{},[22,281,282],{},"?string",[250,284,285,286],{},"une chaîne ou ",[22,287,288],{},"null",[235,290,291,296],{},[250,292,293],{},[22,294,295],{},"int|string",[250,297,298],{},"un entier ou une chaîne (type union)",[235,300,301,306],{},[250,302,303],{},[22,304,305],{},"void",[250,307,308],{},"la fonction ne renvoie rien",[53,310,312],{"className":55,"code":311,"language":57,"meta":58,"style":58},"\u003C?php\nfunction titreOuDefaut(?string $titre, int|float $note = 0): string\n{\n    return ($titre ?? \"Sans titre\") . \" ($note)\";\n}\n",[22,313,314,320,356,360,389],{"__ignoreMap":58},[62,315,316,318],{"class":64,"line":65},[62,317,69],{"class":68},[62,319,73],{"class":72},[62,321,322,324,327,329,331,334,336,339,341,344,346,349,352,354],{"class":64,"line":76},[62,323,79],{"class":68},[62,325,326],{"class":82}," titreOuDefaut",[62,328,87],{"class":86},[62,330,282],{"class":68},[62,332,333],{"class":86}," $titre, ",[62,335,90],{"class":68},[62,337,338],{"class":86},"|",[62,340,259],{"class":68},[62,342,343],{"class":86}," $note ",[62,345,114],{"class":68},[62,347,348],{"class":72}," 0",[62,350,351],{"class":86},")",[62,353,96],{"class":68},[62,355,99],{"class":68},[62,357,358],{"class":64,"line":102},[62,359,105],{"class":86},[62,361,362,364,367,370,373,376,378,381,384,387],{"class":64,"line":108},[62,363,152],{"class":68},[62,365,366],{"class":86}," ($titre ",[62,368,369],{"class":68},"??",[62,371,372],{"class":155}," \"Sans titre\"",[62,374,375],{"class":86},") ",[62,377,25],{"class":68},[62,379,380],{"class":155}," \" (",[62,382,383],{"class":86},"$note",[62,385,386],{"class":155},")\"",[62,388,146],{"class":86},[62,390,391],{"class":64,"line":129},[62,392,176],{"class":86},[37,394,395,396,398],{},"Un paramètre avec ",[22,397,114],{}," possède une valeur par défaut : tu peux alors l'omettre à l'appel.",[10,400,24],{"id":24},[37,402,403,404,407,408,410],{},"Par défaut, PHP convertit les valeurs pour s'adapter au type demandé. Un ",[22,405,406],{},"\"45\""," donné à une fonction qui attend un ",[22,409,90],{}," devient 45 sans erreur.",[37,412,413],{},"Pour que PHP refuse cette conversion, ajoute en toute première instruction du fichier :",[53,415,417],{"className":55,"code":416,"language":57,"meta":58,"style":58},"\u003C?php\ndeclare(strict_types=1);\n\nfunction formaterDuree(int $minutes): string { \u002F* ... *\u002F }\n\nformaterDuree(\"45\"); \u002F\u002F TypeError : un string n'est pas un int\n",[22,418,419,425,441,445,471,475],{"__ignoreMap":58},[62,420,421,423],{"class":64,"line":65},[62,422,69],{"class":68},[62,424,73],{"class":72},[62,426,427,430,432,434,436,439],{"class":64,"line":76},[62,428,429],{"class":68},"declare",[62,431,87],{"class":86},[62,433,24],{"class":72},[62,435,114],{"class":68},[62,437,438],{"class":72},"1",[62,440,126],{"class":86},[62,442,443],{"class":64,"line":102},[62,444,183],{"emptyLinePlaceholder":182},[62,446,447,449,451,453,455,457,459,462,465,468],{"class":64,"line":108},[62,448,79],{"class":68},[62,450,83],{"class":82},[62,452,87],{"class":86},[62,454,90],{"class":68},[62,456,93],{"class":86},[62,458,96],{"class":68},[62,460,461],{"class":68}," string",[62,463,464],{"class":86}," { ",[62,466,467],{"class":202},"\u002F* ... *\u002F",[62,469,470],{"class":86}," }\n",[62,472,473],{"class":64,"line":129},[62,474,183],{"emptyLinePlaceholder":182},[62,476,477,480,482,484,486],{"class":64,"line":149},[62,478,479],{"class":82},"formaterDuree",[62,481,87],{"class":86},[62,483,406],{"class":155},[62,485,199],{"class":86},[62,487,488],{"class":202},"\u002F\u002F TypeError : un string n'est pas un int\n",[37,490,491,492,495],{},"Le mode strict s'active ",[41,493,494],{},"fichier par fichier",". Il s'applique aux appels faits depuis ce fichier. Une erreur de type est signalée tout de suite plutôt que de produire un résultat bizarre plus loin.",[497,498,499],"tip",{},[37,500,501,502,505],{},"Mets ",[22,503,504],{},"declare(strict_types=1);"," en haut de chaque nouveau fichier PHP. C'est une habitude peu coûteuse qui évite beaucoup de bugs.",[10,507,509],{"id":508},"une-classe","Une classe",[37,511,39,512,515,516,519,520,523,524,527],{},[41,513,514],{},"classe"," est un plan qui décrit une sorte d'objet : ses données (les ",[41,517,518],{},"propriétés",") et ses actions (les ",[41,521,522],{},"méthodes","). Un ",[41,525,526],{},"objet"," est un exemplaire créé à partir de ce plan.",[53,529,532],{"className":55,"code":530,"filename":531,"language":57,"meta":58,"style":58},"\u003C?php\ndeclare(strict_types=1);\n\nclass Recette\n{\n    public function __construct(\n        public string $titre,\n        public int $duree,\n    ) {\n    }\n\n    public function resume(): string\n    {\n        return \"{$this->titre} ({$this->duree} min)\";\n    }\n}\n","Recette.php",[22,533,534,540,554,558,567,571,585,595,605,610,616,621,638,644,676,681],{"__ignoreMap":58},[62,535,536,538],{"class":64,"line":65},[62,537,69],{"class":68},[62,539,73],{"class":72},[62,541,542,544,546,548,550,552],{"class":64,"line":76},[62,543,429],{"class":68},[62,545,87],{"class":86},[62,547,24],{"class":72},[62,549,114],{"class":68},[62,551,438],{"class":72},[62,553,126],{"class":86},[62,555,556],{"class":64,"line":102},[62,557,183],{"emptyLinePlaceholder":182},[62,559,560,563],{"class":64,"line":108},[62,561,562],{"class":68},"class",[62,564,566],{"class":565},"sIXEE"," Recette\n",[62,568,569],{"class":64,"line":129},[62,570,105],{"class":86},[62,572,573,576,579,582],{"class":64,"line":149},[62,574,575],{"class":68},"    public",[62,577,578],{"class":68}," function",[62,580,581],{"class":72}," __construct",[62,583,584],{"class":86},"(\n",[62,586,587,590,592],{"class":64,"line":173},[62,588,589],{"class":68},"        public",[62,591,461],{"class":68},[62,593,594],{"class":86}," $titre,\n",[62,596,597,599,602],{"class":64,"line":179},[62,598,589],{"class":68},[62,600,601],{"class":68}," int",[62,603,604],{"class":86}," $duree,\n",[62,606,607],{"class":64,"line":186},[62,608,609],{"class":86},"    ) {\n",[62,611,613],{"class":64,"line":612},10,[62,614,615],{"class":86},"    }\n",[62,617,619],{"class":64,"line":618},11,[62,620,183],{"emptyLinePlaceholder":182},[62,622,624,626,628,631,634,636],{"class":64,"line":623},12,[62,625,575],{"class":68},[62,627,578],{"class":68},[62,629,630],{"class":82}," resume",[62,632,633],{"class":86},"()",[62,635,96],{"class":68},[62,637,99],{"class":68},[62,639,641],{"class":64,"line":640},13,[62,642,643],{"class":86},"    {\n",[62,645,647,650,652,655,658,661,664,666,668,671,674],{"class":64,"line":646},14,[62,648,649],{"class":68},"        return",[62,651,156],{"class":155},[62,653,654],{"class":72},"$this",[62,656,657],{"class":68},"->",[62,659,660],{"class":86},"titre",[62,662,663],{"class":155},"} ({",[62,665,654],{"class":72},[62,667,657],{"class":68},[62,669,670],{"class":86},"duree",[62,672,673],{"class":155},"} min)\"",[62,675,146],{"class":86},[62,677,679],{"class":64,"line":678},15,[62,680,615],{"class":86},[62,682,684],{"class":64,"line":683},16,[62,685,176],{"class":86},[37,687,688,689,692,693,696,697,700,701,703],{},"La méthode ",[22,690,691],{},"__construct"," est le ",[41,694,695],{},"constructeur"," : PHP l'appelle quand tu crées un objet avec ",[22,698,699],{},"new",". ",[22,702,654],{}," désigne l'objet en cours.",[10,705,707],{"id":706},"la-promotion-de-propriétés","La promotion de propriétés",[37,709,710,711,714,715,718],{},"Dans l'exemple, les paramètres du constructeur portent ",[22,712,713],{},"public",". C'est la ",[41,716,717],{},"promotion de propriétés"," : PHP en fait à la fois des paramètres et des propriétés de l'objet, et leur affecte la valeur reçue. Disponible depuis PHP 8.0, elle évite de déclarer chaque propriété et de la réaffecter à la main.",[53,720,722],{"className":55,"code":721,"language":57,"meta":58,"style":58},"\u003C?php\n$tarte = new Recette(\"Tarte aux pommes\", 45);\n\necho $tarte->titre;    \u002F\u002F Tarte aux pommes\necho $tarte->resume(); \u002F\u002F Tarte aux pommes (45 min)\n",[22,723,724,730,755,759,774],{"__ignoreMap":58},[62,725,726,728],{"class":64,"line":65},[62,727,69],{"class":68},[62,729,73],{"class":72},[62,731,732,735,737,740,743,745,748,750,753],{"class":64,"line":76},[62,733,734],{"class":86},"$tarte ",[62,736,114],{"class":68},[62,738,739],{"class":68}," new",[62,741,742],{"class":72}," Recette",[62,744,87],{"class":86},[62,746,747],{"class":155},"\"Tarte aux pommes\"",[62,749,210],{"class":86},[62,751,752],{"class":72},"45",[62,754,126],{"class":86},[62,756,757],{"class":64,"line":102},[62,758,183],{"emptyLinePlaceholder":182},[62,760,761,763,766,768,771],{"class":64,"line":108},[62,762,189],{"class":72},[62,764,765],{"class":86}," $tarte",[62,767,657],{"class":68},[62,769,770],{"class":86},"titre;    ",[62,772,773],{"class":202},"\u002F\u002F Tarte aux pommes\n",[62,775,776,778,780,782,785,788],{"class":64,"line":129},[62,777,189],{"class":72},[62,779,765],{"class":86},[62,781,657],{"class":68},[62,783,784],{"class":82},"resume",[62,786,787],{"class":86},"(); ",[62,789,790],{"class":202},"\u002F\u002F Tarte aux pommes (45 min)\n",[37,792,793,794,796],{},"La flèche ",[22,795,657],{}," accède à une propriété ou appelle une méthode.",[10,798,800],{"id":799},"protéger-les-données","Protéger les données",[37,802,803,804,210,806,809,810,813,814,817],{},"Les mots ",[22,805,713],{},[22,807,808],{},"protected"," et ",[22,811,812],{},"private"," règlent qui peut lire une propriété. Le mot ",[22,815,816],{},"readonly"," interdit de la modifier après la création :",[53,819,821],{"className":55,"code":820,"language":57,"meta":58,"style":58},"\u003C?php\nclass Ingredient\n{\n    public function __construct(\n        public readonly string $nom,\n        private float $quantite = 1.0,\n    ) {\n    }\n}\n",[22,822,823,829,836,840,850,862,881,885,889],{"__ignoreMap":58},[62,824,825,827],{"class":64,"line":65},[62,826,69],{"class":68},[62,828,73],{"class":72},[62,830,831,833],{"class":64,"line":76},[62,832,562],{"class":68},[62,834,835],{"class":565}," Ingredient\n",[62,837,838],{"class":64,"line":102},[62,839,105],{"class":86},[62,841,842,844,846,848],{"class":64,"line":108},[62,843,575],{"class":68},[62,845,578],{"class":68},[62,847,581],{"class":72},[62,849,584],{"class":86},[62,851,852,854,857,859],{"class":64,"line":129},[62,853,589],{"class":68},[62,855,856],{"class":68}," readonly",[62,858,461],{"class":68},[62,860,861],{"class":86}," $nom,\n",[62,863,864,867,870,873,875,878],{"class":64,"line":149},[62,865,866],{"class":68},"        private",[62,868,869],{"class":68}," float",[62,871,872],{"class":86}," $quantite ",[62,874,114],{"class":68},[62,876,877],{"class":72}," 1.0",[62,879,880],{"class":86},",\n",[62,882,883],{"class":64,"line":173},[62,884,609],{"class":86},[62,886,887],{"class":64,"line":179},[62,888,615],{"class":86},[62,890,891],{"class":64,"line":186},[62,892,176],{"class":86},[37,894,895,896,899,900,903],{},"Ici, ",[22,897,898],{},"$nom"," se lit de l'extérieur mais ne se change plus. ",[22,901,902],{},"$quantite"," est invisible hors de la classe.",[10,905,907],{"id":906},"les-espaces-de-noms","Les espaces de noms",[37,909,910,911,914,915,919],{},"Plus ton projet grandit, plus deux classes risquent de porter le même nom. Un ",[41,912,913],{},"espace de noms"," (",[916,917,918],"em",{},"namespace",") regroupe des classes sous un préfixe, comme un dossier.",[53,921,924],{"className":55,"code":922,"filename":923,"language":57,"meta":58,"style":58},"\u003C?php\ndeclare(strict_types=1);\n\nnamespace App;\n\nclass Recette { \u002F* ... *\u002F }\n","src\u002FRecette.php",[22,925,926,932,946,950,959,963],{"__ignoreMap":58},[62,927,928,930],{"class":64,"line":65},[62,929,69],{"class":68},[62,931,73],{"class":72},[62,933,934,936,938,940,942,944],{"class":64,"line":76},[62,935,429],{"class":68},[62,937,87],{"class":86},[62,939,24],{"class":72},[62,941,114],{"class":68},[62,943,438],{"class":72},[62,945,126],{"class":86},[62,947,948],{"class":64,"line":102},[62,949,183],{"emptyLinePlaceholder":182},[62,951,952,954,957],{"class":64,"line":108},[62,953,918],{"class":68},[62,955,956],{"class":565}," App",[62,958,146],{"class":86},[62,960,961],{"class":64,"line":129},[62,962,183],{"emptyLinePlaceholder":182},[62,964,965,967,969,971,973],{"class":64,"line":149},[62,966,562],{"class":68},[62,968,742],{"class":565},[62,970,464],{"class":86},[62,972,467],{"class":202},[62,974,470],{"class":86},[37,976,977,978,981],{},"Pour l'utiliser ailleurs, tu importes la classe avec ",[22,979,980],{},"use"," :",[53,983,986],{"className":55,"code":984,"filename":985,"language":57,"meta":58,"style":58},"\u003C?php\nuse App\\Recette;\n\n$r = new Recette(\"Crêpes\", 30);\n","index.php",[22,987,988,994,1003,1007],{"__ignoreMap":58},[62,989,990,992],{"class":64,"line":65},[62,991,69],{"class":68},[62,993,73],{"class":72},[62,995,996,998,1001],{"class":64,"line":76},[62,997,980],{"class":68},[62,999,1000],{"class":72}," App\\Recette",[62,1002,146],{"class":86},[62,1004,1005],{"class":64,"line":102},[62,1006,183],{"emptyLinePlaceholder":182},[62,1008,1009,1012,1014,1016,1018,1020,1023,1025,1028],{"class":64,"line":108},[62,1010,1011],{"class":86},"$r ",[62,1013,114],{"class":68},[62,1015,739],{"class":68},[62,1017,742],{"class":72},[62,1019,87],{"class":86},[62,1021,1022],{"class":155},"\"Crêpes\"",[62,1024,210],{"class":86},[62,1026,1027],{"class":72},"30",[62,1029,126],{"class":86},[37,1031,1032,1033,1035,1036,1038],{},"La déclaration ",[22,1034,918],{}," doit venir tout en haut du fichier, juste après ",[22,1037,429],{},". On rangera ces fichiers automatiquement grâce à Composer, au dernier chapitre.",[10,1040,1042],{"id":1041},"à-retenir","À retenir",[15,1044,1045,1053,1064,1069,1078,1081],{},[18,1046,1047,1048,1050,1051,25],{},"Une fonction se déclare avec ",[22,1049,79],{},", des paramètres typés et un type de retour après ",[22,1052,96],{},[18,1054,1055,1057,1058,1060,1061,1063],{},[22,1056,282],{}," signifie « chaîne ou ",[22,1059,288],{}," », ",[22,1062,295],{}," un type union.",[18,1065,1066,1068],{},[22,1067,504],{}," en tête de fichier interdit les conversions de type implicites.",[18,1070,1071,1072,1074,1075,1077],{},"Une classe décrit des propriétés et des méthodes ; ",[22,1073,699],{}," crée un objet, ",[22,1076,657],{}," y accède.",[18,1079,1080],{},"La promotion de propriétés (PHP 8.0) déclare et affecte les propriétés dans les paramètres du constructeur.",[18,1082,1083,1084,1086,1087,1089],{},"Un ",[22,1085,918],{}," évite les collisions de noms, ",[22,1088,980],{}," importe une classe.",[1091,1092,1093],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}",{"title":58,"searchDepth":76,"depth":102,"links":1095},[1096,1097,1098,1099,1100,1101,1102,1103,1104],{"id":12,"depth":76,"text":13},{"id":34,"depth":76,"text":35},{"id":220,"depth":76,"text":221},{"id":24,"depth":76,"text":24},{"id":508,"depth":76,"text":509},{"id":706,"depth":76,"text":707},{"id":799,"depth":76,"text":800},{"id":906,"depth":76,"text":907},{"id":1041,"depth":76,"text":1042},"Écrire des fonctions typées avec strict_types, puis modeler tes données avec des classes, la promotion de propriétés et les espaces de noms.","md",{},[43,226,24,514,695,717,816,918],"intermediaire","\u002Fphp\u002Ffonctions-et-objets",[1112],"\u002Fphp\u002Fboucles-et-tableaux",[1114,1118,1121],{"nom":1115,"url":1116,"type":1117},"Manuel PHP en français, déclarations de type","https:\u002F\u002Fwww.php.net\u002Fmanual\u002Ffr\u002Flanguage.types.declarations.php","doc",{"nom":1119,"url":1120,"type":1117},"Manuel PHP en français, constructeurs et destructeurs","https:\u002F\u002Fwww.php.net\u002Fmanual\u002Ffr\u002Flanguage.oop5.decon.php",{"nom":1122,"url":1123,"type":1124},"OpenClassrooms, Concevez votre site web avec PHP et MySQL","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F918836-concevez-votre-site-web-avec-php-et-mysql","cours",{"title":5,"description":1105},[1127,1129,1131],{"nom":1128,"url":1116},"Manuel PHP, déclarations de type",{"nom":1130,"url":1120},"Manuel PHP, constructeurs",{"nom":1132,"url":1133},"Manuel PHP, espaces de noms","https:\u002F\u002Fwww.php.net\u002Fmanual\u002Ffr\u002Flanguage.namespaces.php","php\u002F04.fonctions-et-objets","SV4QuuQtRnCyjzn1wtqUw9j_W5LaZQ5zSl1qm_nN_CM",[1137,1141,1145,1148,1149,1153,1157],{"path":1138,"title":1139,"stem":1140},"\u002Fphp\u002Fpremiers-pas","Premiers pas en PHP","php\u002F01.premiers-pas",{"path":1142,"title":1143,"stem":1144},"\u002Fphp\u002Ftypes-et-chaines","Types, chaînes et conditions","php\u002F02.types-et-chaines",{"path":1112,"title":1146,"stem":1147},"Boucles et tableaux","php\u002F03.boucles-et-tableaux",{"path":1110,"title":5,"stem":1134},{"path":1150,"title":1151,"stem":1152},"\u002Fphp\u002Fformulaires","Formulaires et sécurité","php\u002F05.formulaires",{"path":1154,"title":1155,"stem":1156},"\u002Fphp\u002Fpdo-et-composer","Base de données avec PDO et Composer","php\u002F06.pdo-et-composer",{"path":1158,"title":1159,"stem":1160},"\u002Fphp","PHP","php\u002Findex",[1162,1164],{"title":1146,"path":1112,"stem":1147,"description":1163,"children":-1},"Ranger plusieurs valeurs dans un tableau, y compris associatif, et les parcourir avec foreach, for et while.",{"title":1151,"path":1150,"stem":1152,"description":1165,"children":-1},"Recevoir les données d'un formulaire avec $_GET et $_POST, les valider et protéger l'affichage contre les failles XSS avec htmlspecialchars.",[1167],{"path":1112,"title":1146,"ligne":57},[1169,1171,1172,1173,1174,1175,1177],{"path":1138,"title":1139,"niveau":1170,"stem":1140},"debutant",{"path":1142,"title":1143,"niveau":1170,"stem":1144},{"path":1112,"title":1146,"niveau":1170,"stem":1147},{"path":1110,"title":5,"niveau":1109,"stem":1134},{"path":1150,"title":1151,"niveau":1109,"stem":1152},{"path":1154,"title":1155,"niveau":1176,"stem":1156},"avance",{"path":1158,"title":1159,"niveau":1178,"stem":1160},"memo",1794583448733]