Questions about converting existing PHP class to Composer package..??

I have an existing PHP class library on GitHub that consists of a parent class and a few child classes.  I'm just learning about Composer and I'm trying to convert this to a package.

From what I've read, it looks like the first step is going to involve restructuring my directories to follow the PSR-0 standard.  Is that accurate?

If so, that's going to be quite a drastic change to my class, so I'm wondering if I should update my existing GitHub repo or create a separate one altogether..??  Seems like such a drastic change could cause issues for people using my current class if they pull from GitHub not realizing so much was different.  

On that note, how far do I need to go with it?  Right now my structure is old, basic structure where my config file and my class files are in /includes.  Then the classes are named things like paypal.class.php, paypal.adaptive.class.php, etc.  

Well, it looks like this PSR-0 standard is wanting something more like /angelleye/PayPal/PayPal.php, where my class name would just be PayPal instead of paypal.class.php.  And then it looks like I should go with PayPal_Adaptive.php as my adaptive class name, which would then turn into something like /angelleye/PayPal/PayPal/Adaptive.php..??

I'm just not sure I'm following that entirely right, and again, if I am, it seems like maybe this needs to be an entirely separate GitHub repo..??

Also, once I do this, will people that are not using composer still be able to use the class library, or does this make it a composer only type of thing so I'd still have to maintain two separate versions of my class?  I know I have lots of people using my class that are novice and intermediate developers and may not know about or want to use Composer, but would rather just download and include themselves like they always have.  

Any information on if I'm headed down the right track or not would be greatly appreciated.  Thanks!
LVL 11
Andrew AngellCo-Owner / DeveloperAsked:
Who is Participating?
Ray PaseurConnect With a Mentor Commented:
I think I would make a separate repository.  This is a big change from what many of your users may be accustomed to, and it will require them to restructure their libraries.  That's not an upgrade, it's an incompatibility (even if it leads to better things).  It also creates twice as much work for you, and to that end, I would deprecate the old repo so you can leave it in the steady state and concentrate your development on the new version.

Suggest you leave this question open for day or two to see what others have to say about it.

Best regards, ~Ray
Andrew AngellCo-Owner / DeveloperAuthor Commented:
Thanks for the info, Ray.  So it sounds like I've got the general idea correct then..??

One thing I'm a little confused about, too, is how to handle config files with this sort of setup..??  Right now my library has that /includes folder with a basic config file (not a class) and then my actual class files, too.

So if I make this change I'd move the class files into something like /lib/angelleye/PayPal/, but would my config file still stay this way or does it need to be converted into an actual class, or how does that get handled exactly?  

Again, any info is appreciated.  Thanks!
Ray PaseurCommented:
Yes, I think you have the general idea right on.

If I understand your config file correctly, it would probably become a class that the other classes would extend.  There is never a perfect solution for things like that.  A lot of the current thinking seems to hover around "dependency injection" but this has a feel (to me, at least) like multiple inheritance.  It can create more complexity than it relieves.  Anything we can do that favors convention over configuration makes our software easier for others to use.  At least we can put all of the configuration switches in one script :-)

I've never jumped into composer, so I'm a little unclear about some aspects of it, but I think the idea of include() files goes away in favor of an autoload strategy that is based on structured names.  Beware of case-sensitivity in the names.  You might also want to read a bit about autoload() and spl_autoload_register()
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.