but I want it to abort the "write" if the php command fails.
As far as I know, this isn't possible with VIM. Documentation doesn't state this capability either, so I'm pretty sure that can't be done, without a hack. The question is though what you're trying to accomplish? I have a script that makes sure I have no parse errors in PHP before I commit to version control, instead of when I save the file. That's a simple pre-commit hook, perhaps that something that'll work?
If you're really interested in linting before you save the file, you might be able to rewrite "ZZ" and ":w" to a command you wrote yourself, that in turns lints the file (in case of a PHP file) and saves upon no errors. I'm not sure if you can remap the :w, and it might cause more issues than it solves though.
Perhaps a simpler solution would be to create a command on a keystroke you choose yourself (e.g. F5), and make that do what you want?
php -l % || chmod u-w %
– Department