Avoiding Collisions in Packages

  • When packages modify base classes or resolvers, they can conflict with other packages
  • Macros let packages extend behaviour without overriding the class itself
  • This avoids the collision that occurs when two packages redefine the same base class
use Illuminate\Database\Connection;
use Dyrynda\Database\Connection\MySqlConnection;
use Dyrynda\Database\Connection\SQLiteConnection;
use Dyrynda\Database\Connection\PostgresConnection;

Connection::resolverFor('mysql', function ($connection, $database, $prefix, $config): MySqlConnection {
    return new MySqlConnection($connection, $database, $prefix, $config);
});

Connection::resolverFor('postgres', function ($connection, $database, $prefix, $config): PostgresConnection {
    return new PostgresConnection($connection, $database, $prefix, $config);
});

Connection::resolverFor('sqlite', function ($connection, $database, $prefix, $config): SQLiteConnection {
    return new SQLiteConnection($connection, $database, $prefix, $config);
});

← / → navigate · N notes · Esc exit