Den ons. 12. dec. 2018 kl. 00.56 skrev Peter Kokot <peterko...@gmail.com>:
> Is there any existing example currently used somewhere? I'm not sure I
> fully understand this but there might be something on this. With this,
> use statements are not utilized I assume and it goes a bit away from
> modern OOP coding practices where each file will still need to have
> require_once statements for every required class. Yes?
>
> Would code look nicer or more complicated than this example?

Well conceptionally the same could be said about a long list of "use
X\Y\Z;" vs a require_once statement. I mean sure an autoloader is
convinent but it also depends on the actual OOP usage (see below
comments for example)

> - PSR-4 compliant Autoloader class:
> https://github.com/php/web-bugs/blob/master/src/Autoloader.php
> - Requiring a single auoloader on a single place in the app (this is
> dual loader because of lack of Composer in production):
> https://github.com/php/web-bugs/blob/master/include/prepend.php

Well they would look just about the same, because what essentially
being done is to separate the small bits and pieces from the prepend
script into multiple files is how I understand the argument here. I
mean sure the prepend script is not pretty, but its a bootstraper.

The database class improvements[1] should be straight PDO for the most part:
- Passing the statement class should be done with the other set of $options
- Instead of implementing methods like queryAll(), the statement fetch
methods etc, the code using it should have been updated instead since
we are not using MDB2 anymore anyway, so no need to emulate that
naming
- The statement execute method chaining is nice but again the code
should be just updated to reflect PDO
- The PDO quote method is a bit tricker, but instead a simple
procedural function could be implemented to wrap around it in 3 lines,
which would fit functions.php as database access is pretty much used
on every page in www/
- Only loaded once in the bootstraper and it is on pretty much every
request (because of the authentication check for the navigational
links if you are logged in)

Similar to what Levi stated in a mail earlier, many projects just
implement classes with static methods because it can be easily
autoloaded. Many of these classes just implement "static" methods  for
the sake of autoloading (or so it seems)[2], like:
- \App\Repository\ObsoletePatchRepository - Have a constructor to
shave off a single argument for two methods
- \App\Repository\PackageRepository - Same as above (array keys for
the constant array is even redudant)
- \App\Repository\PatchRepository - Same for a database handle, it
uses a global constant to set a constant value of a property for a
private method thats only called once in a non loop
- \App\Repository\PullRequestRepository - Same for a dabase handle

(Besides I find the "Repository" suffix odd considering they are all
in the "\App\Repository" namespace anyway, but its irrelevant)

I didn't look too much at the other classes. I get abstracting some
things to make it more flawless, is good. The uploading API in PHP is
kinda interesting to the the least, but we only really allow uploads
in one place (patches), but isn't 200+ lines of abstraction for one
place to upload files, including special methods purely for testing, a
bit overkill?


[1] 
https://git.php.net/?p=web/bugs.git;a=commit;h=73062503a65bfa62d5f2f365ee99269225580bb9
[2] 
https://git.php.net/?p=web/bugs.git;a=tree;f=src;h=7b80bef6e77759c469295827e920d92b4216f87d;hb=HEAD



-- 
regards,

Kalle Sommer Nielsen
ka...@php.net

-- 
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to