{"id":73,"date":"2017-04-24T22:27:21","date_gmt":"2017-04-24T20:27:21","guid":{"rendered":"http:\/\/www.lab3216.com\/?p=73"},"modified":"2018-11-07T11:07:47","modified_gmt":"2018-11-07T10:07:47","slug":"lautoloading-dans-php","status":"publish","type":"post","link":"https:\/\/blog.scribter.com\/?p=73","title":{"rendered":"L&rsquo;autoloading dans PHP"},"content":{"rendered":"<p>L&rsquo;autoloading permet de charger automatiquement les classes.<\/p>\n<p>Au lieu d&rsquo;ajouter un<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw1\">require<\/span> <span class=\"st_h\">'className.php'<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>\u00e0 chaque fois que l&rsquo;on a besoin d&rsquo;une classe, on va cr\u00e9er un autoloader qui charge automatiquement les classes.<\/p>\n<p>Pour cr\u00e9er un autoloader qui charge les classes \u00e0 chaque fois qu&rsquo;il rencontre une directive new comme dans :<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">new<\/span> className<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>nous devons d&rsquo;abord cr\u00e9er la fonction:<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">function<\/span> __autolad<span class=\"br0\">&#40;<\/span><span class=\"re0\">$class_name<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw1\">require<\/span> <span class=\"st_h\">'class\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$class_name<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'.php'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>d\u00e8s \u00e0 pr\u00e9sent nous n&rsquo;avons plus besoin d&rsquo;utiliser de<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw1\">require<\/span> <span class=\"st_h\">'className.php'<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>C&rsquo;est l&rsquo;autoloader qui s&rsquo;en charge maintenant d&rsquo;inclure la d\u00e9claration de la classe.<\/p>\n<p>L&rsquo;inconv\u00e9nient ici, c&rsquo;est que toutes les classes doivent se trouver dans le dossier class\/ et il n&rsquo;est pas possible de d\u00e9clarer d&rsquo;autre autoloaders<\/p>\n<p>La solution pour rem\u00e9dier \u00e0 ce probl\u00e8me consiste ici \u00e0 d\u00e9clarer l&rsquo;autoloader de cette mani\u00e8re<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">function<\/span> myAutoloader<span class=\"br0\">&#40;<\/span><span class=\"re0\">$class_name<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw1\">require<\/span> <span class=\"st_h\">'class\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$class_name<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'.php'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>et d&rsquo;utiliser la fonction<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"php codecolorer\">spl_autoloader_register<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'myAutoloader'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>qui enregistre la fonction myAutoloader() dans la pile __autoload()<\/p>\n<p>Nous pourront ainsi d\u00e9clarer\u00a0plusieurs autoloaders<\/p>\n<p>Une id\u00e9e encore meilleure ici est de cr\u00e9er une classe Autoloader<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">class<\/span> Autoloader <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp;static <span class=\"kw2\">function<\/span> register<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <a href=\"http:\/\/www.php.net\/spl_autoload_register\"><span class=\"kw3\">spl_autoload_register<\/span><\/a><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/array\"><span class=\"kw3\">array<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"kw4\">__CLASS__<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'autoload'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp;static <span class=\"kw2\">function<\/span> autoload<span class=\"br0\">&#40;<\/span><span class=\"re0\">$class_name<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">require<\/span> <span class=\"st_h\">'class\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$class_name<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'.php'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Il faudra ensuite inclure uniquement la classe Autoloader et appeler notre m\u00e9thode register de Autoloader<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:650px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw1\">require<\/span> <span class=\"st_h\">'class\/autoloader.php'<\/span><span class=\"sy0\">;<\/span><br \/>\nAutoloader<span class=\"sy0\">::<\/span><span class=\"me2\">register<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>avant d&rsquo;instancier nos classes.<\/p>\n<p>De cette mani\u00e8re, il ne sera plus n\u00e9cessaire d&rsquo;inclure les d\u00e9clarations de classes et il sera possible d&rsquo;inclure d&rsquo;autres autoloaders.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;autoloading permet de charger automatiquement les classes. Au lieu d&rsquo;ajouter un 1require &lsquo;className.php&rsquo;; \u00e0 chaque fois que l&rsquo;on a besoin d&rsquo;une classe, on va cr\u00e9er un autoloader qui charge automatiquement les classes. Pour cr\u00e9er un autoloader qui charge les classes \u00e0 chaque fois qu&rsquo;il rencontre une directive new comme dans : 1new className&#40;&#41;; nous devons &hellip; <a href=\"https:\/\/blog.scribter.com\/?p=73\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">L&rsquo;autoloading dans PHP<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-development-web"],"featured_image_src":null,"author_info":{"display_name":"metouisa","author_link":"https:\/\/blog.scribter.com\/?author=1"},"_links":{"self":[{"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=73"}],"version-history":[{"count":16,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":178,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions\/178"}],"wp:attachment":[{"href":"https:\/\/blog.scribter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.scribter.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}