一个关于eval的问题

Cain 2004-09-21 06:09:19
<?php
function classFactory($classname)
{
$code = "return new {$classname}(";
if (func_num_args() > 1) {
$params = array_slice(func_get_args(),1);
$c = count($params);
for($i=0;$i<$c;++$i) {
if ($i>0) {
$code .= ',';
}
$code .= '$params[' . $i . ']';
}
}
$code .= ');';
/**************************************************
* 问题:
* print $code. "<br>";
* output: return new Bar($params[0]);
* 请问下面的eval($code)是如何把return new Bar($params[0]);
* 替换成new Bar($params[0])或是其他的?
**************************************************/
return eval($code);
}

class Bar
{
function Bar($arg1)
{
echo "I am Bar, I expect 1 argument...<br>";
echo "arg1 = $arg1<br><br>";
}
}

$myBar = classFactory('Bar',4564);
?>
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tod204 2004-09-22
  • 打赏
  • 举报
回复
eval
将值代入字符串之中。
语法: void eval(string code_str);
返回值: 无
函数种类: 资料处理
内容说明
本函数可将字符串之中的变量值代入,通常用在处理数据库的资料上。参数 code_str 为欲处理的字符串。值的注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号。使用本函数处理后的字符串会沿续到 PHP 程序结束。
screend 2004-09-22
  • 打赏
  • 举报
回复
实际上eval()只是将字符串执行一次而已,没有什么其他的,楼主这个例子意义深远啊,说明设计模式已经在php中有所体现了,希望能出一本用PHP讲设计模式的书籍...;-)
xuzuning 2004-09-22
  • 打赏
  • 举报
回复
eval($code)并没有把return new Bar($params[0]);替换成new Bar($params[0])
而是执行return new Bar($params[0]);
Cain 2004-09-22
  • 打赏
  • 举报
回复
没人回答?


自己up

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧