<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[56356] trunk: Code Modernization: Use "declare" in WP_List_Table magic methods deprecation message</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/56356">56356</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/56356","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>hellofromTonya</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2023-08-03 19:50:20 +0000 (Thu, 03 Aug 2023)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Code Modernization: Use "declare" in WP_List_Table magic methods deprecation message

Changes "define" to "declare" in the deprecation message in `WP_List_Table` magic methods.

Why is "declare" better?
It aligns well to:

* the topic of and published information about dynamic properties.
* the act of explicitly listing the variable as a property on the class.

The goal of this message is guide developers to change their code. Changing the term to "declare" hopefully will aid in the understanding of what is being asked of developers when this deprecation is thrown.

Follow-up <a href="https://core.trac.wordpress.org/changeset/56349">[56349]</a>.

Props hellofromTonya, antonvlasenko.
Fixes <a href="https://core.trac.wordpress.org/ticket/58896">#58896</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadminincludesclasswplisttablephp">trunk/src/wp-admin/includes/class-wp-list-table.php</a></li>
<li><a href="#trunktestsphpunittestsadminwpListTablephp">trunk/tests/phpunit/tests/admin/wpListTable.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadminincludesclasswplisttablephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-wp-list-table.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-list-table.php       2023-08-03 19:20:36 UTC (rev 56355)
+++ trunk/src/wp-admin/includes/class-wp-list-table.php 2023-08-03 19:50:20 UTC (rev 56356)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -187,8 +187,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                trigger_error(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "The property `{$name}` is not defined. Getting a dynamic (undefined) property is " .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "The property `{$name}` is not declared. Getting a dynamic property is " .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.',
</ins><span class="cx" style="display: block; padding: 0 10px">                         E_USER_DEPRECATED
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">                return null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -210,8 +210,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                trigger_error(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "The property `{$name}` is not defined. Setting a dynamic (undefined) property is " .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "The property `{$name}` is not declared. Setting a dynamic property is " .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.',
</ins><span class="cx" style="display: block; padding: 0 10px">                         E_USER_DEPRECATED
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -231,8 +231,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                trigger_error(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "The property `{$name}` is not defined. Checking `isset()` on a dynamic (undefined) property " .
-                       'is deprecated since version 6.4.0! Instead, define the property on the class.',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "The property `{$name}` is not declared. Checking `isset()` on a dynamic property " .
+                       'is deprecated since version 6.4.0! Instead, declare the property on the class.',
</ins><span class="cx" style="display: block; padding: 0 10px">                         E_USER_DEPRECATED
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">                return false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -253,8 +253,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                trigger_error(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "A property `{$name}` is not defined. Unsetting a dynamic (undefined) property is " .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "A property `{$name}` is not declared. Unsetting a dynamic property is " .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.',
</ins><span class="cx" style="display: block; padding: 0 10px">                         E_USER_DEPRECATED
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunktestsphpunittestsadminwpListTablephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/admin/wpListTable.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/admin/wpListTable.php   2023-08-03 19:20:36 UTC (rev 56355)
+++ trunk/tests/phpunit/tests/admin/wpListTable.php     2023-08-03 19:50:20 UTC (rev 56356)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -371,7 +371,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $property_name Property name to get.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param mixed $expected       Expected value.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_should_get_compat_fields_defined_property( $property_name, $expected ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_should_get_compat_fields( $property_name, $expected ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $list_table = new WP_List_Table( array( 'plural' => '_wp_tests__get' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 'screen' === $property_name ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -389,10 +389,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_should_throw_deprecation_when_getting_dynamic_property() {
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecation();
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecationMessage(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'The property `undefined_property` is not defined. Getting a dynamic (undefined) property is ' .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'The property `undeclared_property` is not declared. Getting a dynamic property is ' .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.'
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->assertNull( $this->list_table->undefined_property, 'Getting a dynamic property should return null from WP_List_Table::__get()' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertNull( $this->list_table->undeclared_property, 'Getting a dynamic property should return null from WP_List_Table::__get()' );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -418,10 +418,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_should_throw_deprecation_when_setting_dynamic_property() {
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecation();
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecationMessage(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'The property `undefined_property` is not defined. Setting a dynamic (undefined) property is ' .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'The property `undeclared_property` is not declared. Setting a dynamic property is ' .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.'
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->list_table->undefined_property = 'some value';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->list_table->undeclared_property = 'some value';
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -433,7 +433,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $property_name Property name to check.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param mixed $expected       Expected value.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_should_isset_compat_fields_defined_property( $property_name, $expected ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_should_isset_compat_fields( $property_name, $expected ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $actual = isset( $this->list_table->$property_name );
</span><span class="cx" style="display: block; padding: 0 10px">                if ( is_null( $expected ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->assertFalse( $actual );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -450,10 +450,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_should_throw_deprecation_when_isset_of_dynamic_property() {
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecation();
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecationMessage(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'The property `undefined_property` is not defined. Checking `isset()` on a dynamic (undefined) property ' .
-                       'is deprecated since version 6.4.0! Instead, define the property on the class.'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'The property `undeclared_property` is not declared. Checking `isset()` on a dynamic property ' .
+                       'is deprecated since version 6.4.0! Instead, declare the property on the class.'
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->assertFalse( isset( $this->list_table->undefined_property ), 'Checking a dyanmic property should return false from WP_List_Table::__isset()' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertFalse( isset( $this->list_table->undeclared_property ), 'Checking a dynamic property should return false from WP_List_Table::__isset()' );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -477,10 +477,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_should_throw_deprecation_when_unset_of_dynamic_property() {
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecation();
</span><span class="cx" style="display: block; padding: 0 10px">                $this->expectDeprecationMessage(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'A property `undefined_property` is not defined. Unsetting a dynamic (undefined) property is ' .
-                       'deprecated since version 6.4.0! Instead, define the property on the class.'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'A property `undeclared_property` is not declared. Unsetting a dynamic property is ' .
+                       'deprecated since version 6.4.0! Instead, declare the property on the class.'
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                unset( $this->list_table->undefined_property );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         unset( $this->list_table->undeclared_property );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span></span></pre>
</div>
</div>

</body>
</html>