Edit report at http://bugs.php.net/bug.php?id=52583&edit=1

 ID:                 52583
 Comment by:         + at ni-po dot com
 Reported by:        martin dot leucht at gmail dot com
 Summary:            Improved casting and hinting, new magic method
                     __cast()
 Status:             Open
 Type:               Feature/Change Request
 Package:            Class/Object related
 Operating System:   Irrelevant
 PHP Version:        Irrelevant
 Block user comment: N

 New Comment:

@degeberg: Doesn't the RFC cover casting the other way round? I.e. Class
-> Scalar


Previous Comments:
------------------------------------------------------------------------
[2010-08-11 16:54:01] degeb...@php.net

See: http://wiki.php.net/rfc/class_casting_to_scalar

------------------------------------------------------------------------
[2010-08-11 16:30:02] martin dot leucht at gmail dot com

Description:
------------
Type casting in PHP is currently limited to the builtin types. It would
be very useful (IMO) if one could cast a value/variable to a class. And
also type hinting could be improved by casting instead of type checking
only.



I suggest to solve this by introducing a new magic method for classes,
called "__cast()", that accepts the value to cast as parameter.



I see two possible solutions for its functionality:



(1) __cast() replaces the constructor method

This will force the developer to move logics from the constructor into a
separate function/method (which isn't even so bad) or to copy his code
(which is indeed bad). If the function returns with the boolean value
"false", the default error mechanism is started saying something like
"cast to XYZ not allowed".



(2) __cast() acts like a static constructor

The code must return the casted result itself. That means one would
implement some logics to transform the given value to the needed
constructor parameters and create a new instance on his own. To handle
an unsupported value the method would throw an exception or an error.
The negative (or let's say curious) thing about this solution is, that
this cast method could also return a value of a totally different type
(see example).

Test script:
---------------
// see patch file

Expected result:
----------------
// working cast

Actual result:
--------------
// parse errors


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52583&edit=1

Reply via email to