Se ti stupisce che tu possa fare

Codice PHP:

$stm 
$pdo->query("...");

foreach(
$stm as $row)
{
   echo 
$row['mycolumn'];

è perchè PDOStatement implementa Traversable, che vuol dire che può rispondere al foreach (una tua classe implementerebbe pure Iterator o simili, ma le builtin non ne hanno bisogno (come da manuale))