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

Posted on 2014-02-16
Medium Priority
Last Modified: 2014-02-20
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!
Question by:Andrew Angell
  • 2
LVL 111

Accepted Solution

Ray Paseur earned 1500 total points
ID: 39864375
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
LVL 11

Author Comment

by:Andrew Angell
ID: 39864407
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!
LVL 111

Expert Comment

by:Ray Paseur
ID: 39864446
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()

Featured Post


Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this. Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it i…
The title says it all. Writing any type of PHP Application or API code that provides high throughput, while under a heavy load, seems to be an arcane art form (Black Magic). This article aims to provide some general guidelines for producing this typ…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to dynamically set the form action using jQuery.
Suggested Courses
Course of the Month14 days, 10 hours left to enroll

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question