ID: 49367
User updated by: kexianbin at diyism dot com
Reported By: kexianbin at diyism dot com
Status: Open
Bug Type: Feature/Change Request
Operating System: Linux
-PHP Version: 5.3.0
+PHP Version: 5.3.1
New Comment:
Change expected version to 5.3.1 from 5.3.0
Previous Comments:
------------------------------------------------------------------------
[2009-08-26 03:02:21] kexianbin at diyism dot com
In fact, i make the above request for the "SoWork PHP Framework":
<?
define('this', mt_rand());
class cls_so_work
{function __call($fun, $pars)
{foreach ($pars as &$v)
{if ($v===this)
{$v=$this->val;
break;
}
}
$tmp=eval('return
defined("'.$fun.'")?constant("'.$fun.'"):"'.$fun.'";');
$this->val=call_user_func_array($tmp, $pars);
return $this;
}
function __toString()
{return 'so_work';
}
function cls_so_work()
{$obj=func_get_args();
$this->val=isset($obj[0])?$obj[0]:null;
}
}
function so_work()
{$obj=func_get_args();
if (isset($obj[0]))
{return new cls_so_work($obj[0]);
}
else
{if (!isset($GLOABALS['so_work']))
{$GLOABALS['so_work']=new cls_so_work();
}
else
{$GLOABALS['so_work']->val=null;
}
return $GLOABALS['so_work'];
}
}
$o=so_work();
define('echo', 'my_echo');
function my_echo($obj)
{echo $obj;
return $obj;
}
//$o('abcd')->substr(this, 2, 2)->strlen(this)->echo(this);
$o->substr('abcd', 1, 3)->strlen(this)->echo(this);
?>
The commented line in the end will raise the error.
------------------------------------------------------------------------
[2009-08-26 02:57:13] kexianbin at diyism dot com
Description:
------------
Currently, php 5.3.0 doesn't support automatic type casting for the
variable function name, we indeed need it, it could lead to very cool
applications.
Reproduce code:
---------------
<?
class cls_so_work
{function __toString()
{return 'so_work';
}
}
function so_work()
{echo 'hello';
}
$o=new cls_so_work;
echo $o.'<br>';
$o();
?>
Expected result:
----------------
so_work
hello
Actual result:
--------------
so_work
Fatal error: Function name must be a string in
E:\WWW\PhpApps\test\test.php on line 18
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49367&edit=1