[ I copy this to php-dev again, despite the fact that Ilker sent 
this to me in private mail, because I want to promote the 
concept of warnings for named accesses to _-members again. 

Privacy in C++/Java style will raise a lot of issues on this list 
again, if it is introduced to PHP. My proposal will have less 
syntactial impact, and will better blend with the general style 
of the language at this time.

]


Am Donnerstag, 6. Juni 2002 11:58 schrieb Ilker Cetinkaya:
> know how objects and inheritance is done in javascript (ecma
> respectively?). have you ever seen private members on objects
> of js?

In Javascript, each object is it's own class. You create new 
objects basically by duplicating some initial object, that is, 
Javascript's "new" is actually a "clone".

This is conceptually close to what PHP 4 does, where you can have 
preinitialized member variables in an object, and where you can 
at runtime add member variables to an object (and you could for 
a short time even add member functions thanks to Andrej, I 
believe). PHP 4 deviates from (I would even say "obscures this") 
by not having an explicit "clone" operator (but PHP 4 implicitly 
clones every time due to unexpected value-semantics).

Regarding the concept of private: Private member variables and 
private member functions are a nuisance anyway in a language 
where you can add members to an object at runtime.

Also, in it's wake the concept of "private" introduces a lot of 
syntactic complexity as well, such as the need for "protected" 
variables and functions, and a "friend" relationship between 
classes. You will immediately see discussions around this issue 
once privacy is introduced.

In Javascript-like languages, the same effect can be had by 
simply issuing a warning whenever accessing a member variable or 
member function with a name starting with "_" through a named 
variable. That is, you would see warnings for

        $a->_private_slot = 10;
        $b = $a->_private_slot;

        $c = $a->_private_function();

but not when accessing the same internally using $this:

        $this->_private_slot = 10;
        $b = $this->_private_slot;

        $c = $this->_private_function();

A coder that must access private member variables and member 
functions through a named variable (and there are a lot of 
legitimate reasons for this, namely all metaprogramming 
applications including debuggers, rpc proxies, serializers and 
the like) can easily shut of this warning:

        @$a->_private_slot = 10;
        @$b = $a->_private_slot;

        @$c = $a->_private_function();

will all execute warning-free, and clearly mark these statements 
as violating the encapsulation-contract of conventional OO 
programming, the same way a type-cast marks a violation of the 
typing contract in C, C++ or other statically typed languages 
(and there are a lot of legit reasons for that, too).

This implementation of private has several advantages, one of 
them being that it is elective, another of them being that it is 
the minimal syntactic extension of current PHP, and a third of 
them being that it is compatible with current PEAR.

> namespaces?
> statics?
> consts?

These concepts do not contradict a dynamically (this is different 
from loosely!) typed language concept.

> in closing, i have to admit that such a change would be a big
> issue in aspects of compatibility, juggling, parsing and
> object handling. therefore i'm sure it's not going to be
> realized.
> but still i'd desire it. just to be more stricty.

I suggest you try Java. You seem to want it.

Kristian


--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to