Re: Proposal for aggregation vs. MI

From: Date: Thu, 11 Apr 2002 01:24:41 +0000
Subject: Re: Proposal for aggregation vs. MI
References: 1 2 3 4  Groups: php.dev 
Request: Send a blank email to php-dev+get-82538@lists.php.net to get a copy of this message
I was looking at other languages that are loosely typed like PHP to see how they implemented their classes. A good example that is known by a lot of people is Javascript. Here are some things I gathered: Class-based object-oriented languages, such as Java and C++, are founded on the concept of two distinct entities: classes and instances. A prototype-based language, such as JavaScript, does not make this distinction: it simply has objects. A prototype-based language has the notion of a prototypical object, an object used as a template from which to get the initial properties for a new object. Any object can specify its own properties, either when you create it or at run time. In addition, any object can be associated as the prototype for another object, allowing the second object to share the first object's properties. JavaScript implements inheritance by allowing you to associate a prototypical object with any constructor function. So, you can create exactly the Employee-Manager example, but you use slightly different terminology. First you define the Employee constructor function, specifying the name and dept properties. Next, you define the Manager constructor function, specifying the reports property. Finally, you assign a new Employee object as the prototype for the Manager constructor function. Then, when you create a new Manager, it inherits the name and dept properties from the Employee object. function Employee () { this.name = ""; this.dept = "general";} function Manager () { this.reports = [];}Manager.prototype = new Employee;function WorkerBee () { this.projects = [];}WorkerBee.prototype = new Employee; In JavaScript, at run time you can add or remove properties from any object. If you add a property to an object that is used as the prototype for a set of objects, the objects for which it is the prototype also get the new property. So I was wondering if we could use that type of stuff for php, not using functions to define "classes" though. I got the info from http://developer.netscape.com/docs/manuals/js/core/jsguide/obj2.htm#1008342 where it goes in more details. Fab. ----- Original Message ----- From: "Lauri Liinat" <lauri.liinat@microlink.ee> To: <marcus.boerger@post.rwth-aachen.de>; <php-dev@lists.php.net> Sent: Wednesday, April 10, 2002 6:15 PM Subject: Re: [PHP-DEV] Proposal for aggregation vs. MI > > i'll try to answer both Marcus and Wez here: > > > Where is the big difference (first is postfix syntax, second is prefix syntax). > > the difference is between whether you have to change *lots* of existing code > or do exactly *one* cast in new code while you write it: > > $timer = (Timer) $MI_obj; > > library_call_1 ($timer); > library_call_2 ($timer); > library_call_3 ($timer); > > etc... > > what i am proposing here is that the cast would "stick" when object > references are passed around or assigned to. the reference $var would > implicitly "remember" the class it has been cast up to. reasonable enough? > > > And as we have no typesystem we cannot use typecasting but another solution. > > no typesystem huh? we do have classes, right? so we do have a > typesystem, and just because a variable's type is hidden from the > programmer most of the time doesn't mean it isn't there. btw, PHP > already has the (new_type)$var cast syntax - you can do $var = (int)$var > for example. so we wouldn't really be adding a new construct, but rather > extending an existing one. > > so, Wez - why would you want to introduce yet another > cast operator - the "as" keyword? while PHP already has > adopted the C-style (new_type)... operator? > > lauri > > > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, visit: http://www.php.net/unsub.php > >

« previous php.dev (#82538) next »