Option 2, a column per property, is a far superior strategy to storing a serialized or otherwise structured string representation like XML1, for the simple reason that the objects represent data and the database is designed for storing and retrieving it in a relational way, all while separated from your application logic.
You are able to query values, combine them, join them against other tables representing other object types. The database is itself highly optimized to perform the querying, sorting, joining, etc which you might want to do in your application. You lose all of that if you store it in a serialized form, and the object's data remains entirely bound to your code where it must be unserialized or decoded to be reconstituted as an object and used, and worse, it remains frozen in its own data structure, unable to be easily related to other object types in your application.
This is one of the foundations of web application design. When data needs to have a persistent state, storing object properties to database columns wherein the rows may be instantiated as objects is an almost universal pattern in web applications and just about any application framework you may find in any programming language will implement this in a generally similar way. Object-relational-mappers (ORM) exist to automate the 2-way transition from database storage in tables to objects in your code.
If you are interested in exploring an ORM for PHP, this question details some well-regarded options. Additionally, I would recommend examining how a few PHP application frameworks approach their Model storage and retrieval - Symfony, Laravel, CakePHP, others. Some depend on an ORM like Doctrine, others use their own methods.
1 Purpose-built JSON document storage engines like CouchDB or MongoDB are in a somewhat different scope here, talking instead about just directly serializing PHP into or an XML column. When to use a dedicated NoSQL solution is a far broader topic with lots of opinions each way.