Можно ли через foreach перебирать объект класса?
Да. Переберёт все публичные свойства.
А если надо ещё и протектед/приватные, то просто создай внутри класса метод с перебором всех свойств:

<?php
class MyClass
{
    public $public = 'значение 1';
    protected $protected = 'защищённая переменная';
    private $private   = 'закрытая переменная';

    public function iterateAll() {
       foreach ($this as $key => $value) {
           print "$key => $value\n";
       }
    }
}

$class = new MyClass();
$class->iterateAll();
А ещё можно так:
https://www.php.net/manual/ru/class.iteratoraggreg...