All three are wrong, because you are storing connection strings in source code. Source code is not the right place for configuration, because you are not expected to have to change your code (and so, do all the regression testing) every time your database moves or every time you move from development database to staging and to production database.
Instead:
Store the connection string in a configuration file.
Create a class which accesses configuration file options.
The class should provide the callers with the simple interface to those options; callers shouldn't care where the configuration file is or how options are stored inside.
This abstraction makes it possible later to switch from, for instance, a configuration stored in a JSON file, to a configuration stored in an XML file, or even move configuration to a database such as Redis.
Create an instance of this class every time you need to access the configuration options.
You don't need a singleton here; if one day, performance becomes an issue (that is, the time needed to open and parse the configuration file becomes prohibitive), use caching.
If you are absolutely sure (beware of YAGNI) that you'll have to move to a different storage mechanism soon (for example from JSON file to Redis), you may use Dependency Injection by creating the configuration object at the top of the stack, and then pass it to the callers. This will ensure that when moving to a different mechanism, you'll change no more than one line in your code base, replacing:
$configuration = new JsonFileAppConfiguration();by:
$configuration = new RedisAppConfiguration();but everything else will rely only on the interface
IAppConfigurationthat both those classes implement.