From:             
Operating system: Irrelevant
PHP version:      Irrelevant
Package:          Class/Object related
Bug Type:         Feature/Change Request
Bug description:Improved casting and hinting, new magic method __cast()

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 bug report at http://bugs.php.net/bug.php?id=52583&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52583&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52583&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52583&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52583&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52583&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52583&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52583&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52583&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52583&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52583&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52583&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52583&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52583&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52583&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52583&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52583&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52583&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52583&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52583&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52583&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52583&r=mysqlcfg

Reply via email to