There's only a couple of things that stood out to me as suboptimal:
- PHP ncurses is not well documented beyond just function signatures. Of course, curses itself is well documented, and ncurses functions map one to one with the PHP extension, so that wasn't really that bad.
- I should have separated my classes and built a PHAR (PHP archive), but I got lazy.
- There's the portability comment I've made a few times already
But other than all that, PHP did its job perfectly. Easy to write, read, and organize.