разница в том что квадратные скобки это способ получения элемента по индексу. В то время как фигурные скобки предоставляют нам конструкцию для динамического вычисления индекса. Причем не только индекса:
$foo = (object) ['bar' => 'buz'];
${'foo'}
$foo->{'b' . 'ar'} // 'buz'
${'foo'}->{'bar'} // 'buz
то есть грубо говоря, фигурные скобки это общий способ, а квадратные - частный.