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´.

How to upgrade Subversion on OSX

I have OSX 10.9.5 and Subversion 1.7.17 (r1591372).

For developing WordPress with PHPStorm I seem to need Subversion 1.8 due to this notification:

Screen Shot 2014-10-09 at 11.19.14

Which shows this error:

Screen Shot 2014-10-09 at 11.19.31

It reads ´svn: E155021: This client is too old to work with the working copy at ‘/Users/andrea/dev/wp/vvv/www/wordpress-develop’ (format 31). You need to get a newer Subversion client. For more details, see http://subversion.apache.org/faq.html#working-copy-format-change´.

Here they say

Now, IntelliJ IDEA offers different integration options for each specific Subversion:

1.6 – SVNKit only
1.7 – SVNKit and command line client
1.8 – Command line client only

If you opt to the command line client, make sure you have its binaries installed on your machine, because they are not bundled with IntelliJ IDEA.

So I checked my system:

$ svn --version
svn, version 1.7.17 (r1591372)
   compiled Aug  7 2014, 17:03:25
...

Then I installed Subversion all together using brew.

$ brew update
Updated Homebrew from 80f2d299 to 93e17517.
...

$ brew info subversion
subversion: stable 1.8.10 (bottled)
https://subversion.apache.org/
Not installed
...

$ brew install subversion
==> Installing dependencies for subversion: readline, sqlite, openssl
==> Installing subversion dependency: readline
...
==> Installing subversion
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/subversion-1.8.10_1.mavericks.bottle.3.tar.gz
######################################################################## 100,0%
==> Pouring subversion-1.8.10_1.mavericks.bottle.3.tar.gz
==> Caveats
svntools have been installed to:
  /usr/local/opt/subversion/libexec

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/subversion/1.8.10_1: 116 files, 9,4M

It took some seconds to download and compile, but eventually I got:

$ svn --version
svn, version 1.7.17 (r1591372)
   compiled Aug  7 2014, 17:03:25
...

Uh?

$ which -a svn
/usr/bin/svn
/usr/local/bin/svn

OK, then I tried editing my ´~/.bash_profile´:

export PATH="/usr/local/bin:$PATH"

After which I had:

$ source ~/.bash_profile

$ svn --version
svn, version 1.8.10 (r1615264)
   compiled Aug 25 2014, 10:57:58 on x86_64-apple-darwin13.3.0
...

Then I closed PHPStorm and opened it again… But PHPStorm error didn’t go away !!

Then I searched PHPStorm preferences for “svn” and tried forcing ´/usr/local/bin/svn´:

Screen Shot 2014-10-09 at 11.13.39

Which immediately made the error disappear:

Screen Shot 2014-10-09 at 11.20.18

So I undid the PATH change, just to be sure OSX still sees Subversion 1.7, and all is working fine.