$_html is empty when var dumped

so I turn to you guys to help me see what I am doing wrong here.

First thing your doing wrong is over complicating a simple effective API.

Your code makes no sense. Your mixing functions that echo output with arbitrary html mark up that gets assigned to a non existing class property that nothing is ever done with.

Your trying to OOP something that you have written as procedural. Just use a variable that lives inside the method and either return it or echo it and be done. And while your at it use the WordPress functions that return the values instead of printing them and assign to this same variable.

The only reason to use protected properties are for class extensibility and building objects. Your just running the loop.