How to program for the future in PHP

TL;DR: Refrain from ´private´ methods.

Still in version 4.0 of WordPress ´wp-includes/wp-db.php´ (but introduced in changeset 27075) we find this setup:

{[ .do_query | 1.hilite(=php=) ]}

It’s quite unfortunate that ´_do_query´ was declared ´private´ because if you inherit from ´wpdb´ (see the header of the class) and override ´public function query´ then you also have to override ´_do_query´ just because.

In fact, due to how private functions work in PHP (they can only be called from methods of the same class that defines them), you cannot call the inherited ´function _do_query´ from your overridden ´function query´, which instead is the most natural thing to do.

If possible, always prefer ´protected´ to ´private´ in PHP. If it had been declared ´protected function _do_query´ I could have called its inherited code from my ´public function query´.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.