Open alex996 opened 7 years ago
Its wrapping PDO in a static class.. which offers nothing except a static method.. nuff said.. not sure why it even has best in its name.. you just need to look at the code (static, mysql only dsn!, no namespacing or composer support, no tests, bad formatting) so I suspect its just typical click-bait SEO tactics...
A better alternative would be: https://github.com/phppackage/pdo-wrapper though PDO does not need a "wrapper" of any sort. Use models with dependency injection.
There doesn't seem to be a way to use it in another function, either in the same class or in another class that extends from this, without using DB::
which makes it no different than using it in the main code outside of functions and classes.
I suppose why @colshrapnel considers it the best PDO wrapper is because he could make it static with method chaining. I like method chaining, even though I don't know how to implement it yet, but I don't think that could justify as the best.
Not saying I could do better. It's just that the wrapper can't be used in certain ways. It looks really beginner friendly though since the usage is the same inside or outside of functions.
I made some PHP wrappers but not without help from his website. https://github.com/joshcangit/flexphpwrapper/tree/oop/pdo
The author mentions that this wrapper class would be a bad practice in an OO design. I assume that this is because of the nature of the singleton pattern, which seems to be extremely criticized; but could this be more elaborated?
I'd been implementing a simple ORM with this wrapper class for DB operations. It worked well, and I was satisfied with it until I've stumbled upon heavy critique of singleton and PDO wrappers in general. Most argue that PDO is a sufficient layer by itself and should not be extended or wrapped. However, in the case of ORM (e.g. Eloquent or Doctrine), what is a proper design approach to handle DB operations? Why would singleton be inappropriate if we introduce models? What other techniques be advised? And lastly, is it possible, at all, to have a similarly concise and straightforward class that would be appropriate for an ORM and OOP?