Also "everything is an object" is nuts. Sometimes a number it just a number, a struct is just a struct, a function is just a function. Any language that does the "everything is a ..." dance is nuts.
Discussion
except when they say a function is a variable. that's a powerful distinction. for which reason basically all languages support closures now.
also i think you can boil things down to constant, variable, type, function/method (the receiver is just a convenience) and pointer/reference. to make things easy for humans, you can then attach a symbol to these, which gives you debugging.
objects are shit because they are usually 3+ levels of indirection which opens up space for misinterpretation, long compilation times, and pernicious, hidden errors.
yes, symbols allow debugging and reflection, which allows you to write code that writes code. this is how some interpreters implement execution of interpreted code, by assembling trees of closures and then loading their stacks
Objects are fine, but nesting them or endless inheritance is complete garbage. I shouldn't have to dig through 10 levels of inheritance trying to figure out which overload of a method is actually being called. Zend and by extension Magento are terrible at this. The later tried to make the core functionality extensible by non-programmers via an awful XML plugin language. By the time that was done being applied a view model could be any of about 20 similarly (or even identically) named things.