Edit report at https://bugs.php.net/bug.php?id=63268&edit=1
ID: 63268
Comment by: klaussantana at gmail dot com
Reported by: klaussantana at gmail dot com
Summary: Scalar Casting
Status: Open
Type: Feature/Change Request
Package: Unknown/Other Function
Operating System: Any
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
And then something like this:
register_casting_behavior( 'object', 'string', '::__toString' );
register_casting_behavior( 'object', 'int', '::__toInt' );
$S = new String('Teste');
echo $S; // will call __toString() method within $S and return the value...
echo $S +1; // will call __toInt() method within $S and return the value...
Callbacks would work somehow like this:
* When you specify an array with 1st parameter as a class name string and 2nd
as constructor it will instantiate the object. Else it will invoke the static
method.
* When you specify an array with 1st parameter as an object and 2nd as any
method it will invoke that method within that object
* If the origin type is "object" and the callback is a string that starts with
"::" it will call the remaining callback string as a method in the object being
casted as the destination
type.
Previous Comments:
------------------------------------------------------------------------
[2012-10-12 21:20:23] klaussantana at gmail dot com
Note that it'll be automatically chainable because the result of ->toLower() is
a
string and it will cast as an object...
And you'll can also do something like this:
echo 'My String'->toLower();
Just suggestions.. comment.
------------------------------------------------------------------------
[2012-10-12 21:16:36] klaussantana at gmail dot com
Description:
------------
It would be nice if we can control the casting behavior of any type to another.
Like a function like this:
register_casting_behavior( $from, $to, $callback_function );
So when you do this:
register_casting_behavior( 'int', 'bool', 'int2bool' );
$X = (bool) 1;
It will call int2bool( 1 ) and so...
Then....
Test script:
---------------
register_casting_behavior( 'string', 'object', array( 'String', '__construct' )
);
class String
{
protected $value = null;
public function __construct( $String )
{
$this->value = $String;
return $this;
}
public function toLower()
{
return strtolower($this->value);
}
public function underline()
{
return "<span style='text-decoration: underline;'>{$this->value}</span>";
}
}
$S = 'My String';
echo $S->toLower()->underline();
// will output: <span style='text-decoration: underline;'>my string</span>
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=63268&edit=1