Which way is better for db handler? Is it a bad idea for a model class hold the db handler as a property? Example code are as below. I think the second is better, but the first is not so bad in my opinion.

First:

class ActiveModel {
    protected $db;

    public function __construct() {
        $this-&gt;db = DbFactory::get('Foo');
    }

    public function save() {
        //use $this-&gt;db to do the job;
        ....
    }
}


Second:

class ActiveModel {

    public function save($db = null) {
        if ($db === null) {
            $db = DbFactory::get('Foo');
        }
        //then use $db to do the job;
        ....
    }
}
It is fine and very convenient to keep the database handler as a property.  However, you should pass it in the constructor via dependency injection, rather than call it's factory method inside the class.  This can ease unit testing when you need to mock a database connection object.

public function __construct($db) {
    $this-&gt;db = $db;
}