{"id":38,"date":"2008-12-17T18:31:00","date_gmt":"2008-12-17T18:31:00","guid":{"rendered":"http:\/\/www.olivierdoucet.info\/wordpress\/?p=38"},"modified":"2008-12-17T18:31:00","modified_gmt":"2008-12-17T18:31:00","slug":"difference-entre-static-et-self-en-php-53","status":"publish","type":"post","link":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/","title":{"rendered":"Diff\u00e9rence entre static:: et self:: en PHP 5.3"},"content":{"rendered":"<p>Gr\u00e2ce au <a href=\"http:\/\/fr3.php.net\/oop5.late-static-bindings\" hreflang=\"fr\">Late Static Binding<\/a> introduit dans PHP 5.3, la gestion des classes va encore plus loin. Un nouveau mot-clef a \u00e9t\u00e9 introduit dans le langage, il s&rsquo;agit de &lsquo;static&rsquo;. Son utilisation ressemble \u00e9trangement \u00e0 &lsquo;self&rsquo;, mais il y a une tr\u00e8s grande diff\u00e9rence entre les deux.<\/p>\n<p><!--more--><\/p>\n<p>D\u00e9monstration&nbsp;: <\/p>\n<pre>&lt;?php<br \/>class test1 {<br \/>    protected static $a = 0;<br \/>   public static function go () {<br \/>       echo self::$a;<br \/>   }<br \/>}<br \/>class test2 extends test1 {<br \/>    protected static $a = 1;<br \/>}<br \/>test2::go ();<\/pre>\n<p>En PHP 5.2 et PHP 5.3, le code ci-dessus va renvoyer 0. Pas normal me dites-vous, et vous avez bien raison. En effet, l&rsquo;analyse du mot-clef &lsquo;self&rsquo; se fait au moment de la compilation, donc son utilisation ignore toutes les classes \u00e9tendues.<\/p>\n<p>Et voici la magie de PHP 5.3. R\u00e9\u00e9crivez la fonction go comme suit dans test1&nbsp;: <\/p>\n<pre>&lt;?php<br \/>public static function go () {<br \/>       echo static::$a;<br \/>}<\/pre>\n<p>Oh magie, le code affiche bien \u00ab\u00a01\u00a0\u00bb&nbsp;!<\/p>\n<p>En conclusion&nbsp;: <a href=\"http:\/\/wiki.php.net\/todo\/php53\" hreflang=\"fr\">Les apports de PHP 5.3<\/a> vont bien au del\u00e0 de ce point de d\u00e9tail. Toutefois la version est encore largement bugg\u00e9e et inutilisable en production. Mais surveillez les nouveaut\u00e9s (notamment au niveau du langage objet), il y a vraiment de bonnes choses dedans.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gr\u00e2ce au <a href=\"http:\/\/fr3.php.net\/oop5.late-static-bindings\" hreflang=\"fr\">Late Static Binding<\/a> introduit dans PHP 5.3, la gestion des classes va encore plus loin. Un nouveau mot-clef a \u00e9t\u00e9 introduit dans le langage, il s&rsquo;agit de &lsquo;static&rsquo;. Son utilisation ressemble \u00e9trangement \u00e0 &lsquo;self&rsquo;, mais il y a une tr\u00e8s grande diff\u00e9rence entre les deux.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-38","post","type-post","status-publish","format-standard","hentry","category-php-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts\" \/>\n<meta property=\"og:description\" content=\"Gr\u00e2ce au Late Static Binding introduit dans PHP 5.3, la gestion des classes va encore plus loin. Un nouveau mot-clef a \u00e9t\u00e9 introduit dans le langage, il s&#039;agit de &#039;static&#039;. Son utilisation ressemble \u00e9trangement \u00e0 &#039;self&#039;, mais il y a une tr\u00e8s grande diff\u00e9rence entre les deux.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/\" \/>\n<meta property=\"og:site_name\" content=\"My thoughts\" \/>\n<meta property=\"article:published_time\" content=\"2008-12-17T18:31:00+00:00\" \/>\n<meta name=\"author\" content=\"olivier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@odoucet\" \/>\n<meta name=\"twitter:site\" content=\"@odoucet\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"olivier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/\",\"name\":\"Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts\",\"isPartOf\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\"},\"datePublished\":\"2008-12-17T18:31:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.olivierdoucet.info\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Diff\u00e9rence entre static:: et self:: en PHP 5.3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/\",\"name\":\"My thoughts\",\"description\":\"En fran\u00e7ais and in english :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\",\"name\":\"olivier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"caption\":\"olivier\"},\"sameAs\":[\"http:\/\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/","og_locale":"fr_FR","og_type":"article","og_title":"Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts","og_description":"Gr\u00e2ce au Late Static Binding introduit dans PHP 5.3, la gestion des classes va encore plus loin. Un nouveau mot-clef a \u00e9t\u00e9 introduit dans le langage, il s'agit de 'static'. Son utilisation ressemble \u00e9trangement \u00e0 'self', mais il y a une tr\u00e8s grande diff\u00e9rence entre les deux.","og_url":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/","og_site_name":"My thoughts","article_published_time":"2008-12-17T18:31:00+00:00","author":"olivier","twitter_card":"summary_large_image","twitter_creator":"@odoucet","twitter_site":"@odoucet","twitter_misc":{"\u00c9crit par":"olivier","Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/","url":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/","name":"Diff\u00e9rence entre static:: et self:: en PHP 5.3 - My thoughts","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#website"},"datePublished":"2008-12-17T18:31:00+00:00","author":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96"},"breadcrumb":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.olivierdoucet.info\/blog\/2008\/12\/17\/difference-entre-static-et-self-en-php-53\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.olivierdoucet.info\/blog\/"},{"@type":"ListItem","position":2,"name":"Diff\u00e9rence entre static:: et self:: en PHP 5.3"}]},{"@type":"WebSite","@id":"https:\/\/www.olivierdoucet.info\/blog\/#website","url":"https:\/\/www.olivierdoucet.info\/blog\/","name":"My thoughts","description":"En fran\u00e7ais and in english :)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96","name":"olivier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","caption":"olivier"},"sameAs":["http:\/\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/comments?post=38"}],"version-history":[{"count":0,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/38\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/media?parent=38"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/categories?post=38"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/tags?post=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}