<?php
// original (without the tags and curlys: -6 bytes)
#$a='ABCDEFGHIJKLMNOPQRSTUVWXYZ';$b=65;$c=26;while($c>0)echo str_repeat(chr($b++),26-$c).substr($a,26-$c--).'<br>';
// "\n" instead of '<br>' (-2)
#$a='ABCDEFGHIJKLMNOPQRSTUVWXYZ';$b=65;$c=26;while($c>0)echo str_repeat(chr($b++),26-$c).substr($a,26-$c--)."\n";
// shorter $a (-12)
#$a=join(range(A,Z));$b=65;$c=26;while($c>0)echo str_repeat(chr($b++),26-$c).substr($a,26-$c--)."\n";
// loop $a from 0 to 26 (-11)
#$a=join(range(A,Z));$b=65;while($c<26)echo str_repeat(chr($b++),$c).substr($a,$c++)."\n";
// for instead of while (-1)
#$a=join(range(A,Z));for($b=65;$c<26;)echo str_repeat(chr($b++),$c).substr($a,$c++)."\n";
// golf away $b (-4)
#$a=join(range(A,Z));for(;$c<26;)echo str_repeat(chr($c+65),$c).substr($a,$c++)."\n";
// golf away $a (-6)
#for(;$c<26;)echo str_repeat(chr($c+65),$c).substr(join(range(A,Z)),$c++)."\n";
// golf away substr (-2)
#for(;$c<26;)echo str_repeat(chr($c+65),$c).join(range(chr(65+$c++),Z))."\n";
// str_pad instead of str_repeat (-1)
#for(;$c<26;)echo str_pad(join(range(chr(65+$c),Z)),26,chr(65+$c++),0)."\n";
// bring $b back, golf away $c (-1)
#for($b=64;$b++<90;)echo str_pad(join(range(chr($b),Z)),26,chr($b),0)."\n";
// substitute chr($b) (-2)
#for($b=64;$b++<90;)echo str_pad(join(range($c=chr($b),Z)),26,$c,0)."\n";

// a slightly different version for also 72 bytes:
#for($b=64;Z>=$c=chr(++$b);)echo str_pad(join(range($c,Z)),26,$c,0),"\n";
 
// save another 2 bytes with a leading pyhsical linebreak:
#for($b=64;Z>=$c=chr(++$b);)echo"
#",str_pad(join(range($c,Z)),26,$c,0);

// loop through characters instead of ordinal values (-8)
for($c=A;$c!=AA;)echo"
",str_pad(join(range($c,Z)),26,$c++,0);
