|
Posted by Jerry Stuckle on 09/17/07 11:56
Yarco wrote:
> On Sep 13, 7:27 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
>> Yarco wrote:
>>> On Sep 12, 8:13 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
>>>> Yarco wrote:
>>>>> For example:
>>>>> <?php
>>>>> class Test
>>>>> {
>>>>> private $name = 'yarco';
>>>>> }
>>>>> $p = new ReflectionPropery('Test', 'name');
>>>>> print $p->getValue();
>>>>> ?>
>>>>> This won't work. See:http://www.php.net/manual/en/language.oop5.reflection.php
>>>>> ==================
>>>>> Note: Trying to get or set private or protected class property's
>>>>> values will result in an exception being thrown.
>>>>> ==================
>>>>> But when we use print_r or var_dump, we could see the private member.
>>>>> Why reflection doesn't support this?
>>>>> (We have friend class in c++.)
>>>> Because that's the way it works. And there are no friend classes in PHP.
>>>> If you want the value of a private variable, you need a non-private
>>>> method to get it.
>>>> And I suspect the allow print_r() and var_dump() to display the values
>>>> because those are debugging aids, while reflection isn't necessarily.
>> > But when i think of Reflection, it is a method to view everything in
>> > an object(member's type and value).
>> > If it doesn't support private member, we already have such functions
>> > like get_class_XXX...no need reflection.
>> >
>>
>> (Top posting fixed)
>>
>> That's not what reflection is in OO design. PHP has it right.
>> Reflection allows you to look at a class and see what is *publicly*
>> available. It is not meant to break encapsulation.
>>
>> P.S. Please don't top post. Thanks.
>>
>> --
>> ==================
>> Remove the "x" from my email address
>> Jerry Stuckle
>> JDS Computer Training Corp.
>> jstuck...@attglobal.net
>> ==================
>
>
> I think steve is right.
> But i don't agree with Jerry:
>> Reflection allows you to look at a class and see what is *publicly*
>> available. It is not meant to break encapsulation.
> Reflection should access private members.Or we won't need such a core
> feature in php.
>
(top posting fixed)
No, encapsulation is one of the basic tenets of both Object Based and
Object Oriented programming. Properly implemented, it provides
protection for those members of the class.
Reflection is not meant to be a way to break that tenet. Rather, it is
a way to discover the *publicly available* members. To allow reflection
to access private members would break that tenet and potentially cause
problems OO is designed to prevent. This is true in all OO languages
where reflections is available.
So, whether you agree with me or not is immaterial. The way it is
implemented in PHP matches OO concepts and other languages where
reflection is used.
Also, top posting is posting your message before the message you're
replying to. This newsgroup (and most of usenet) posts responses after
the message they are responding to.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
[Back to original message]
|