2013/7/14 Giuseppe Ronca <giuseppe.ron...@gmail.com>

> Php is now used by many CMS, many of which use a modular system with a wide
> range of add-ons developed by third parties. This can cause various
> conflicts, such as when two or more external components using the same
> library (i.g. with a different version) in this case the classes /
> namespace will be in collision. This can become unmanageable by the
> webmaster because they are not always able to change third parties code and
> there aren't other "clean" methods to solve this kind of problem ( complex
> and dirty eval methods excluded ).
>
> here you are a thread related to this issue:
>
> http://stackoverflow.com/questions/17628475/php-include-different-version-of-same-library
>
> *One possible solution* would be to extend the scoping for the inclusions
> of files using something like:* local_include_**
>
> in this way you can also create a sort of "nesting" system for classes
> making possible a syntax like this:
>
> class foo {
>      public static function bar () {
>           local_include "test.php" / / file which includes "test" class;
>           return new test ();
>      }
> }
>
> echo get_class (foo :: bar ()) / / output: "test"
>
> new test () / / raise an error instead
>
>
> *Also this could work:*
>
> namespace {oldversion
>     local_include / lib/api-1.0/library.php;
> }
> namespace {newversion
>     local_include / lib/api-2.0/library.php;
> }
>
> $ oldlibary = new oldversion \ Library ();
> $ newlibrary = new newversion \ Library ();
>
> It shouldn't have backward compatibility issues since it's a new
> implementation and you shouldn't change anything else.
> What do you think about that?
>

You can have multiple objects from the same type in different
implemenations in the same process?

What should happen, when I instanciate an object of "test" in version X and
pass it to a function, that expect it as version Y? To be consistent PHP
_must_ trigger an error too, if something from the locally included file
leaves its scope

class foo {
     public static function bar () {
          local_include "test.php" / / file which includes "test" class;
          return new test (); // <-- error here
     }
}

Because else it is not a local scope anymore.

Backward compatibility (or compatibility in general) between component is
something the plugin maintainer should take care of, not the language.

Regards,
Sebastian




-- 
github.com/KingCrunch

Reply via email to