{"id":113,"date":"2021-03-08T00:22:30","date_gmt":"2021-03-08T00:22:30","guid":{"rendered":"https:\/\/phptutorial.net\/?page_id=113"},"modified":"2025-04-07T11:35:11","modified_gmt":"2025-04-07T11:35:11","slug":"php-late-static-binding","status":"publish","type":"page","link":"https:\/\/www.phptutorial.net\/php-oop\/php-late-static-binding\/","title":{"rendered":"PHP Late Static Binding"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn about the <strong>PHP late static binding<\/strong>, which is an interesting feature that has been added to the PHP 5.3<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-late-static-binding-in-php'>Introduction to late static binding in PHP <a href=\"#introduction-to-late-static-binding-in-php\" class=\"anchor\" id=\"introduction-to-late-static-binding-in-php\" title=\"Anchor for Introduction to late static binding in PHP\">#<\/a><\/h2>\n\n\n\n<p>Let&#8217;s start with a simple example.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Model<\/span>\n<\/span>{\n\t<span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">static<\/span> $tableName = <span class=\"hljs-string\">'Model'<\/span>;\n\n\t<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getTableName<\/span><span class=\"hljs-params\">()<\/span>\n\t<\/span>{\n\t\t<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">self<\/span>::$tableName;\n\t}\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Model<\/span>\n<\/span>{\n\t<span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">static<\/span> $tableName = <span class=\"hljs-string\">'User'<\/span>;\n}\n\n<span class=\"hljs-keyword\">echo<\/span> User::getTableName(); <span class=\"hljs-comment\">\/\/ Model, not User<\/span>\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/phptutorial.net\/playground\/?q=PD9waHAKCmNsYXNzIE1vZGVsCnsKCXByb3RlY3RlZCBzdGF0aWMgJHRhYmxlTmFtZSA9ICdNb2RlbCc7CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWJsZU5hbWUoKQoJewoJCXJldHVybiBzZWxmOjokdGFibGVOYW1lOwoJfQp9CgpjbGFzcyBVc2VyIGV4dGVuZHMgTW9kZWwKewoJcHJvdGVjdGVkIHN0YXRpYyAkdGFibGVOYW1lID0gJ1VzZXInOwp9CgplY2hvIFVzZXI6OmdldFRhYmxlTmFtZSgpOyAvLyBNb2RlbCwgbm90IFVzZXI\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>How it works.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First, create a <code>Model<\/code> class that has <code>$tableName<\/code> static property with the value Model and a <code>getTableName()<\/code> static method that returns the value of the <code>$tableName<\/code>. <\/li>\n\n\n\n<li>Second, create another class called <code>User<\/code> that extends the <code>Model<\/code> class. The <code>User<\/code> class also has <code>$tableName<\/code> static attribute.<\/li>\n\n\n\n<li>Third, call the <code>getTableName()<\/code> method of the <code>User<\/code> class. However, it returns <code>Model<\/code> instead of <code>User<\/code>.\u00a0The reason is that <code>self<\/code> is resolved to the class in which the method belongs. If you define a method in a parent class and call it from a subclass, it <code>self<\/code> does not reference the subclass as you might expect.<\/li>\n<\/ul>\n\n\n\n<p>To resolve this issue, PHP 5.3 introduced a new feature called PHP static late binding. <\/p>\n\n\n\n<p>Instead of using the <code>self<\/code>, you use the <code>static<\/code> keyword that references an exact class that is called at runtime.<\/p>\n\n\n\n<p>Let&#8217;s modify our example above:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"php\"><span class=\"hljs-meta\">&lt;?php<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Model<\/span>\n<\/span>{\n\t<span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">static<\/span> $tableName = <span class=\"hljs-string\">'Model'<\/span>;\n\n\t<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getTableName<\/span><span class=\"hljs-params\">()<\/span>\n\t<\/span>{\n\t\t<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">static<\/span>::$tableName;\n\t}\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">User<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Model<\/span>\n<\/span>{\n\t<span class=\"hljs-keyword\">protected<\/span> <span class=\"hljs-keyword\">static<\/span> $tableName = <span class=\"hljs-string\">'User'<\/span>;\n}\n\n<span class=\"hljs-keyword\">echo<\/span> User::getTableName(); <span class=\"hljs-comment\">\/\/ User<\/span>\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/phptutorial.net\/playground\/?q=PD9waHAKCmNsYXNzIE1vZGVsCnsKCXByb3RlY3RlZCBzdGF0aWMgJHRhYmxlTmFtZSA9ICdNb2RlbCc7CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWJsZU5hbWUoKQoJewoJCXJldHVybiBzdGF0aWM6OiR0YWJsZU5hbWU7Cgl9Cn0KCmNsYXNzIFVzZXIgZXh0ZW5kcyBNb2RlbAp7Cglwcm90ZWN0ZWQgc3RhdGljICR0YWJsZU5hbWUgPSAnVXNlcic7Cn0KCmVjaG8gVXNlcjo6Z2V0VGFibGVOYW1lKCk7IC8vIFVzZXI\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Now you get the expected result.<\/p>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Did you find this tutorial useful?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"113\"\n\t\t\t\tdata-post-url=\"https:\/\/www.phptutorial.net\/php-oop\/php-late-static-binding\/\"\n\t\t\t\tdata-post-title=\"PHP Late Static Binding\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"113\"\n\t\t\t\tdata-post-url=\"https:\/\/www.phptutorial.net\/php-oop\/php-late-static-binding\/\"\n\t\t\t\tdata-post-title=\"PHP Late Static Binding\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you will learn about the PHP late static binding, which is an interesting feature that has been added to the PHP 5.3 Introduction to late static binding in PHP # Let&#8217;s start with a simple example. Try it How it works. To resolve this issue, PHP 5.3 introduced a new feature [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1753,"menu_order":17,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-113","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/comments?post=113"}],"version-history":[{"count":5,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/113\/revisions"}],"predecessor-version":[{"id":3234,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/113\/revisions\/3234"}],"up":[{"embeddable":true,"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/pages\/1753"}],"wp:attachment":[{"href":"https:\/\/www.phptutorial.net\/wp-json\/wp\/v2\/media?parent=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}