Hi,

Did you considered just using PHPDoc for autocomplete type hinting ?

        /* @var $oArticle oxArticle */
        $oArticle = oxNew('oxarticle');

Tested on Zend studio and NetBeans

Alf

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Stefan Krenz
Sent: Tuesday, May 10, 2011 11:49 AM
To: [email protected]
Subject: [oxid-dev-general] Idea to replace the "oxNew" function

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
_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

Reply via email to