Search code examples
phpcomposer-phpphar

Reference .phar classes installed globally with composer


I've created a small command line tool in PHP and I've also packed that as a PHAR archive.

Next thing I did was publish my archive to packagist.org aka composer.

I can now install my PHAR package through composer like so:

composer global require acme/mypackage

This installs my package fine. And I'm able to run it through command as well.

So far so good, but here comes the problem I´m currently facing.

I have another project should use acme/mypackage. I want that project to reference a class that is packed into that PHAR. Something like this:

<?php
class SomeClass extends AcmeClass { 

}

The problem is that the PHP code doesn't recognize the AcmeClass class. Makes sense, because it´s obviously "globally" installed somewhere on the system.

How do other libraries solve this issue? If I'm not mistaken then PHPUnit does something similar right?

How can I solve this issue?


Solution

  • You'll need to add a composer.json file to the root of your project:

    The first (and often only) thing you specify in composer.json is the require key. You're simply telling Composer which packages your project depends on.

    {
        "require": {
            "monolog/monolog": "1.0.*"
        }
    }
    

    Next, you'll need to autoload your dependencies.

    For libraries that specify autoload information, Composer generates a vendor/autoload.php file. You can simply include this file and you will get autoloading for free.

    require 'vendor/autoload.php';

    https://getcomposer.org/doc/01-basic-usage.md