You could make use of dependnecy injection - constructor injection, e.g.
class User
{
    /**
     * @var Database
     */
    protected $db;
    public function __construct(Database $database)
    {
        $this->db = $database;
    }
    public function view($username)
    {
        $user = $this->db->findFirst('User', 'username', $username);
    }
}
$database = new Database(/* ... */);
$user = new User($database);
Regarding the question in comment: Yes, this is possible. Let's think about some basic (abstract) class that could be used as a parent for all classes that should share the same basic logic (e.g. connecting to a DB, or at least injecting a DB connection).
Such abstract class could be:
class DBObject
{
    /**
     * @var Database
     */
    protected $db;
    public function __construct(Database $db)
    {
        $this->db = $db;
    }
}
Then our User class can extend this abstract class in this way:
class User extends DBObject
{
    public function view($username)
    {
        $user = $this->db->findFirst('User', 'username', $username);
    }
}
Keep in mind that though the abstract class can implement __construct() function, it cannot be directly instantiated. Then somewhere in the code You can do the very same as in first example:
$database = new Database(/* ... */);
$user = new User($database);
$post = new Post($database);