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

 ID:                 46128
 Comment by:         neoegm at hotmail dot com
 Reported by:        131 dot php at cloudyks dot org
 Summary:            Magic function __cast($to)
 Status:             Open
 Type:               Feature/Change Request
 Package:            Feature/Change Request
 Operating System:   Linux
 PHP Version:        5.2.6
 Block user comment: N
 Private report:     N

 New Comment:

This would be very useful in order to be able to define a specific
evaluation method for an object as a boolean, to, for example, simplify
if-switches, so you can just do:



if ($obj)

{

        //...

}



Here an example of a class which toggles its own value each time it's
evaluated as a boolean:



class ToggleObj

{

        var $val = FALSE;



        function __toBool()

        {

                $ret = $this->val;

                $this->val = !$ret;

                return $ret;

        }

}



$obj = new ToggleObj;



if ($obj)

{

        //Does not enter

}



if ($obj)

{

        //Now it does

}





Or going further, to make even table rows highlighted:



foreach ($rows as $row)

{

?>

        <tr class="<?=$obj?"":"highlighted"?>">

                <td><?=$row?></td>

        </tr>

<?php

}



Thanks.



NeoEGM

http://www.neoegm.com/


Previous Comments:
------------------------------------------------------------------------
[2009-03-28 12:41:30] andrea at 3site dot it

I wonder why you guys do not implement in core the PECL php_operator
which would make code style and life much easier.



I cannot imagine a Number class which needs (int)$obj for every single
operation.

Please do not get me wrong, __cast is a good idea, but it covers only
explicit cases while every other decent language (C#, Java, Python)
allows developer to implement implic cast behavior as well.



This, in PHP 5.3, would be excellent (but probaly an illusion thou).

Regards

------------------------------------------------------------------------
[2009-02-06 00:11:19] rayro at gmx dot de

This is such a nice Implementation and very useful, but i prefer to add
the methods __toBool, __toInt and __toArray rather than __cast, stay
tuned with PHP's other magic methods..



I dont agree fully with that post in feature request #38508 from helly.
If that'll be the way, why did the decision for magic methods?

Isnt that all complex although? ^^

We know, but in my eyes (and many others), i think that these magically
stuff is one of the top key features for php. And none of these features
will become critism i think. If not needed, just dont use them!



The additional goody __toInvoke() introduced in 5_3 is a such nice
addition for developing "quick gets" based on nested object sets:

<?php

$magazine(3)->getArticles();

// old way

$magazine->getArticle($magazine->useMagazine(3));

?>

This helper is a "backdoor" like way to enable PHP to fully write nested
Objects like in Javascript. And my opinion for that: I LIKE THIS :)



I think this is a very very discussable topic to the changes for 5_3 or
6_0 beside the wanted support for traditional type hinting and utf8!



thanks

------------------------------------------------------------------------
[2008-11-23 09:01:02] mark at hell dot ne dot jp

Please test the following extension :



http://ookoo.org/svn/snip/phpcastable/



This extension adds a "Castable" interface. Any class implementing this
interface have to implement a __cast() function. This function will be
called when the object needs to be casted to a type.



This extension is EXPERIMENTAL and needs more testing/review before
being used in any production system.

------------------------------------------------------------------------
[2008-10-27 17:08:24] info at netmosfera dot it

AWESOME!

php developers, please, we need it!!

http://bugs.php.net/bug.php?id=46404

------------------------------------------------------------------------
[2008-10-06 04:15:03] mark at hell dot ne dot jp

Backported to PHP 5.2.6 :



http://ookoo.org/svn/snip/php-5.2.6_class_cast_func.patch

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=46128


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

Reply via email to