Hi,

with my colleagues, we thought about the "oxNew" function and we came to
the conclusion that it's possible to (re)enable the auto-completion for
IDEs.

We have searched a way to replace this function and here is the result
of our brainstorming.
It should be faster and additionally gives OXID the ability to control,
which classes can be extended/overwritten.

Three steps to realize our idea:
1. All classes should be renamed to *Base (eg. oxArticle to
oxArticleBase) and an empty class which extends the *Base or the last
module class (eg. class oxArticle extends oxArticleBase {}) is created.
2. If the user clicks "Save" in admin area (and right after a fresh
setup), the class chain must be created and saved in one huge PHP-File
(eg. moduleparents.php, further called as "MP").
3. Now new instances can be created with the PHP default way (eg.
$oArticle = new oxArticle();) and "oxNew" can be removed.

An example with oxArticle and 2 modules ("mfArticle" and "azArticle", in
that order).
The base class should be "oxArticleBase" and the last class in chain
"oxArticle". The class chain is as follows:

File: oxarticlebase.php
class oxArticleBase extends oxBase {...}

File: MP (saved on click on "Save" in admin)
class mfArticle_parent extends oxArticleBase {}

File: mfarticle.php
class mfArticle extends mfArticle_parent {...}

File: MP
class azArticle_parent extends mfArticle {}

File: azarticle.php
class azArticle extends azArticle_parent {...}

File: MP
class oxArticle extends azArticle {}

The MP file looks like:
<?php
class mfArticle_parent extends oxArticleBase {} // core class
class azArticle_parent extends mfArticle {} // core class
class oxArticle extends azArticle {} // core class

// examples without modules
class oxArticleList extends oxArticleListBase {} // core class
class oxCategory extends oxCategoryBase {} // core class
class account_main extends account_mainBase {} // view class
?>

So if you create an instance of "oxArticle", you will get an object with
all (overwritten) methods/properties.
In addition, the includes can be written to the MP file, for faster
class loading. Another way was, to write class paths to the MP file and
let the autoloader load required files.

Another effect: Developers can clearly see, which classes can be
extended/overwritten.

For backward-compatibility the autoloader must be changed a little bit.


What do you think about this solution?

Best regards
Stefan Krenz


-- 
Stefan Krenz                        Mayflower GmbH
Pleichertorstraße 2                 Tel.: +49 931 359 65 1163
D-97070 Würzburg                    Fax : +49 931 359 65 28
[email protected]           http://www.mayflower.de

Mayflower GmbH, Standort Würzburg
Firmensitz: Mannhardtstraße 6, 80538 München
Registergericht: Amtsgericht München, HRB 142039
Geschäftsführer: Gregor Streng, Björn Schotte,
Albrecht Günther, Johann-Peter Hartmann
_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

Reply via email to