Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:68128 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 37197 invoked from network); 16 Jul 2013 11:07:24 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 16 Jul 2013 11:07:24 -0000 Authentication-Results: pb1.pair.com header.from=krebs.seb@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=krebs.seb@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.212.169 as permitted sender) X-PHP-List-Original-Sender: krebs.seb@gmail.com X-Host-Fingerprint: 209.85.212.169 mail-wi0-f169.google.com Received: from [209.85.212.169] ([209.85.212.169:52722] helo=mail-wi0-f169.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id F4/57-20914-A6925E15 for ; Tue, 16 Jul 2013 07:07:23 -0400 Received: by mail-wi0-f169.google.com with SMTP id c10so3998705wiw.4 for ; Tue, 16 Jul 2013 04:07:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=1sh1eLfxZzkCsvZsTpa/NYCOLWfmKoptzESURu5M2Zw=; b=zqeyVSY+wyOiPnZKpdcDO5gCSvtD8VeLv+vFN0uzpfklGdQdpWCHMTgVebq5A62wrs 35L/nrdO3pBGl33az+D+PaR98nPQLk+YKYGtS7g2AVHQLiE6N3oEN43q/lUOZd5CsSHN xvIAgA28t8/2cVGR194WuhLOM9AxaxOVZ/4LxWeVLgT28zvRppbNg8y+lnxWdxRZpNYx c/2FzpOEjYFsXK5C88CsAsOWzKT+uH4huHbDSz/1V6VRswntF/jNfiZYDH9lW5yPRw9u +VqJQvxexxe5pjZHtDbxM7CHPCmwnP/EUNb1O7P6vWMWfx2l8AHD5wgXAXHnRZ83NtE5 hpKg== X-Received: by 10.180.102.36 with SMTP id fl4mr699554wib.45.1373972840203; Tue, 16 Jul 2013 04:07:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.224.129 with HTTP; Tue, 16 Jul 2013 04:06:40 -0700 (PDT) In-Reply-To: References: <1373879683.17031.4.camel@guybrush> Date: Tue, 16 Jul 2013 13:06:40 +0200 Message-ID: To: Giuseppe Ronca Cc: Marco Pivetta , PHP internals list Content-Type: multipart/alternative; boundary=f46d044481c7124df404e19efb2d Subject: Re: [PHP-DEV] PHP proposal on modular systems From: krebs.seb@gmail.com (Sebastian Krebs) --f46d044481c7124df404e19efb2d Content-Type: text/plain; charset=ISO-8859-1 2013/7/16 Giuseppe Ronca > I've studied Composer and as i thought ..it's a "component installer" > (implementing an autoload system) .. nothing else ( i can have similar > result using git submodules ) > > anyway , *you can have a class collision using or not using composer ( it > doesn't solve it, but just advise you that you can't install that package > )* > I fear having multiple implementations of the same class in the same process will result in something worse than a simple class name collision. Again: It is up to the plugin-/addon-maintainer to keep their products up-to-date and compatible. > > for example, if i require those packages ( that require respectively > monolog 1.3 and monolog 1.2 ) : > > { > "require": { > "dbarbar/campfire-monolog-handler": "dev-master", > "swestcott/monolog-extension": "dev-master" > } > } > > *composer will shows it:* > > - Can only install one of: monolog/monolog[1.3.0, 1.2.0]. > - Can only install one of: monolog/monolog[1.3.0, 1.2.1]. > - *Conclusion: don't install monolog/monolog 1.3.1 * > > so , since both of packages need same library ( but with different version > ) you can't install them. > It's the same limitation that you can find in CMS and external extensions > ...and it's a language issue ofc. > > > 2013/7/15 Marco Pivetta > > > > > On 15 July 2013 16:51, Giuseppe Ronca wrote: > > > >> I'm not talking about this kind of problem... > >> I think you know how a CMS works ... we've for example : > >> > >> * *CMS sources that are developed by Joomla devs ( i.g ) with theirs > >> libraries.* > >> * *Plugin (A) developed externally and installed by the final user, that > >> > >> includes inside its sources pclzip library ( the version and library > >> doesn't matter) .* > >> * *Component (B) developed externally and installed by the final user, > >> that > >> includes inside its sources pclzip library again.* > >> > > > > That's why you got two names for a different implementation of the same > > thing. > > You can't call your own thing the same as the original one: it's not the > > same. > > That would even confuse the consumer, which doesn't know if it's the > > original or the new one. > > > > > >> > >> Now ..since that library could not be installed in CMS by default, since > >> devs of the Plugin (A) can't know if needed library is installed ( at > >> their > >> needed version ) inside another component...*we will have ofc a name > >> collision when both plugin and component will be loaded.* > >> > > > > That's actually one of the problems solved by composer... > > > > > >> It could be also a problem of various languages...but classes in local > >> scope / nested are a known technique used by different languages..and > php > >> could implements it even better. > >> > > > > These classes still live under their own package, and their fully > > qualified name is different from all others. > > > > > >> In this way any CMS/Extension can arbitrary decide to use load their > >> components/library in a private scope ( avoiding collision ) . > >> i.g: > >> > >> class Loader { > >> public static function LoadComponent () { > >> local_include "foo_component/loader.php"; > >> } > >> } > >> > > > > This is really coupled to your own system and with how extensible you > > design it. > > You may look at modern PHP frameworks to see how the problem of > > extensibility is solved: it's mainly a DI/configuration issue that has > > nothing to do with class names. > > > > PS i'm not so practice with composer ( used few times ) but when modular > >> systems , such as CMS , give the possibility to extends them with > external > >> components...i don't think that composer could solve this problem. > >> > > > > It is actually already happening. > > You should really really really check it out before going further in > > exploring already explored grounds. > > > > Marco Pivetta > > > > http://twitter.com/Ocramius > > > > http://ocramius.github.com/ > > > -- github.com/KingCrunch --f46d044481c7124df404e19efb2d--