All I want to be able to do is this:

$s = simplexml_load_file('rss.xml');
foreach ($s->item as $item) {
    print htmlentities($item->title . "\n");
}

That's not *all* I want to do, but this is my three-line test case. If
we can figure out a way to make this work, then I'm a happy camper.

I *don't* think it's realisitic to make a person explictly cast
$item->title to a string here. That's not SimpleXML, that's
ConfusingXML, particularly when this works perfectly fine:

print $item->title;

I can't imagine any user in the world understanding why one works and
the other doesn't.

Additionally, I don't think only supporting a print-only __toString()
method is a good thing. That assumes we operate in a CLI context. In a
Web context, people need to call htmlentities() on their data to
ensure their HTML is valid and to prevent XSS attacks. A non-safe lazy
default is asking for trouble.

As to whether this type of magic should be allowed only in C
extensions versus userland classes, is there a fundamental technical
issue or are we only trying to prevent novices from shooting
themselves in the foot?

-adam

On Mon, 1 Dec 2003, Wez Furlong wrote:

> I favour a), if you mean that (string)$com_object will work.
> I'm not so bothered with userspace objects.
>
> b) is just wrong for overloaded objects; if we do some magic
> and either hide an existing __toString() method, or call one
> with the wrong parameters (it might implement one differently
> to the way that we expect), then we end up in trouble.
>
> --Wez.
>
> > I think there are two options:
> > a) Revert the cast operator patch and don't support automatic string
> > conversion by PHP objects (i.e. allowing overloading extensions to support
> > it). But you still shouldn't expect automagical conversions when passing
> > COM objects to functions which accept strings as a parameter.
> > b) Add a __toString() C API function and make $obj->__toString() call
> that.
> > It would mean that your COM example would look like
> > serialize($com_object->__toString()).
> >
> > Personally, I prefer (b) but I think I can live with both.
> > Note: In both cases you won't have automatic conversions.
> >
> > Andi
> >
> >
> >
>
>

-- 
[EMAIL PROTECTED]

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

Reply via email to