The style I've tended to settle on is to use tabs for primary indenting only, and spaces for all other - er, spacing.
function␣foo()
{
$oink␣=␣bar();
for($i=0;␣$i<10;␣$i++)
{
$baz␣␣␣␣=␣'This';␣␣␣␣␣␣␣␣␣␣␣//␣Baz␣is␣that
$wibble␣=␣'Something␣Else';␣//␣While␣Wibble␣is␣something␣else.
switch($oink[$i])
{
case␣1:
blink();
break;
case␣2:
barf();
break;
case␣3:
boggle();
break;
default:
crash_and_burn();
}
}
$smoo␣=␣array_pop($oink);
echo␣($smoo=='whatever')
␣␣␣␣␣?␣"Smoo␣is␣whatever"
␣␣␣␣␣:␣"Smoo␣isn't.";
}
(Where I've used '␣' instead of space so's you can tell them apart from
tabs without having to cut-and-paste it all yourself).
If I was writing more densely (as I tend to do), I'd gobble a line or so by going
function␣foo()
{ $oink␣=␣bar();
for($i=0;␣$i<10;␣$i++)
{ $baz␣␣␣␣=␣'This';␣␣␣␣␣␣␣␣␣␣␣//␣Baz␣is␣that
Tab damage should only throw off formatting in the second case, and even then only if tabs are one character wide....