That is a whole other can of worms. Whereas __construct() and __destruct() can do nothing and are probably pretty trivial to get working, some other methods aren't so clear cut.
Example: __sleep() would have to return an array of member variables so that it does what is expected when called by the user. Like this... ... public function __sleep() { return array_merge( parent::__sleep(), array( "foo", "bar" ) ); } ... My only point being. I like the idea in principal but implementing it for all magic methods could become a somewhat major undertaking. On Mon, May 16, 2011 at 3:28 PM, Anthony Ferrara <ircmax...@gmail.com>wrote: > Well, if we follow that logic (which does make sense), then shouldn't > all magic methods be implicit? So parent::__sleep/__call/__get/etc > would silently do the default if not defined? > > On Mon, May 16, 2011 at 3:18 PM, Andrew Curioso <andrewcuri...@gmail.com> > wrote: > > To play devil's advocate a bit: > > > > It's a special case. If it was really an undefined method then this is > > suddenly ambiguous: > > $foo = new Foo(); > > > > If __construct() is undefined, what is being called in that case? By the > > same logic, that should > > throw an error as well. > > > > On the other hand, if __construct is presumed to be implicitly defined > then > > I think it makes > > logical sense for parent::__construct() to always succeed. > > > > Side note: > > If __construct is implicit then __destruct should also be. > > > > > > > > > > > > > > > > On Mon, May 16, 2011 at 3:10 PM, Anthony Ferrara <ircmax...@gmail.com> > > wrote: > >> > >> Personally, I really don't care for something like this. Would it be > >> caught by a __call declaration if one existed (since it is a call to > >> an undefined method)? Would you expect it to? > >> > >> I'd rather see calls to non-existent methods generate a catachable > >> fatal error (rather than a hard fatal error that's currently thrown). > >> That way we can use an error exception to "catch" the fatal and > >> recover from it if necessary. > >> > >> But silently ignoring a called function, something just doesn't sit > >> right about that... > >> > >> > >> > >> On Mon, May 16, 2011 at 2:44 PM, Andrew Curioso < > andrewcuri...@gmail.com> > >> wrote: > >> > I like that idea and I like that it works for userland classes as > well. > >> > > >> > +1 > >> > > >> > Do you think it should throw a warning, notice, or -- as you both > >> > suggested > >> > -- just silently succeed? > >> > > >> > > >> > > >> > > >> > 2011/5/16 Johannes Schlüter <johan...@schlueters.de> > >> > > >> >> Hi, > >> >> > >> >> I|d actuallz suggest a different option: > >> >> > >> >> If a parent constructor is called but doesn't exist the engine should > >> >> ignore this. The same goes for destructors. > >> >> > >> >> This solution would also work for userland classes. > >> >> > >> >> johannes > >> >> > >> >> On Mon, 2011-05-16 at 14:14 -0400, Andrew Curioso wrote: > >> >> > So, I ran across bug #54631 > >> >> > > >> >> > A fatal error is thrown if you try to call parent::__construct() > from > >> >> > a > >> >> > subclass > >> >> > of SplObjectStorage. > >> >> > > >> >> > I was going to close it as "expected behavior" since that is pretty > >> >> normal > >> >> > if the parent class doesn't implement __construct(). > >> >> > Also, the docs don't list it as having a __construct() method. > >> >> > > >> >> > But then look at SplDoublyLinkedList (and a bunch of others). They > >> >> > are > >> >> > documented > >> >> > as having a __construct() method, yet it triggers a fatal error > when > >> >> > you > >> >> try > >> >> > to call > >> >> > "parent::__construct()" from a subclass' constructor . > >> >> > > >> >> > So it seems to me that there are two possible solutions: > >> >> > > >> >> > - Update the docs to remove ::__construct() for classes that don't > >> >> > have > >> >> one. > >> >> > - Make sure __construct() is implemented in all SPL classes * and > >> >> > update > >> >> the > >> >> > docs. > >> >> > > >> >> > * Even if it is empty. > >> >> > > >> >> > What's everyone thinking? > >> >> > > >> >> > I'd be more than happy to add the constructors to the code where > >> >> > needed, > >> >> I > >> >> > just > >> >> > want to make sure that it is the right move first. > >> >> > > >> >> > > >> >> > - Andrew > >> >> > >> >> > >> >> > >> >> -- > >> >> PHP Internals - PHP Runtime Development Mailing List > >> >> To unsubscribe, visit: http://www.php.net/unsub.php > >> >> > >> >> > >> > > > > > > > > > -- > > Andrew Curioso > > > -- Andrew Curioso