请各位帮忙__call()输出问题,会的回答,不会帮顶,来者有分,48小时内结贴

aoecal 2009-02-03 05:45:39
先看这段代码

<?php
class student{
private $age;
//中间的一些省略掉

function __get($p){
if (isset($this->$p)){
return ($this->$p);
}
else
return (null);
}
function __set($p,$value){
$this->$p=$value;
}
function __call($function_name,$args){
print "调用的函数:$function_name参数:";
print_r ($args);
print "不存在,请检查代码"; }
}
$s= new student();
$s->__set(age,23);
$s->warrs(123);

?>

问题在这个__call上面,如果我写成一句

echo "调用的函数:$function_name参数:$args不存在,请检查代码";

结果为
调用的函数::,请检查代码


这句我写为
echo "调用的函数($function_name)不存在!

则结果为
调用的函数:(warrs)不存在!


这个时候,可以输出那个错误的调用名称,但是我这样写
echo "调用的函数:($function_name)参数($args)不存在";

结果为
调用的函数:(warrs)参数(Array)不存在



这里问题来了,如果要正常输出__call()中的$args,是否仍然需要 print_r一下?
可以用什么办法实现echo 一句就可以输出这句吗?
print_r是否仍然有必要?







PS.至于echo和print的区别,我想我已经很明确了,网上搜来大多都是相同的2B写的错误的东西,说什么print是什么函数,真SB...两者区别的正解为
echo和print都不是函数,是语言结构,圆括号都不是必须的.
1)print只能输出一个字符串,表现像一个函数,比如可以这样写
$test = print "hello' blue";
他能用在更复杂的表达式中
2)echo可以输出多个字符串
比如, echo 'a','b','c';
如果加括号,写成 echo ('a','b','c');当然就2b了.
...全文
128 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yctin 2009-02-04
  • 打赏
  • 举报
回复
print "调用的函数:{$function_name}参数:".
var_export($args,true).
"不存在,请检查代码";


print "调用的函数:{$function_name}参数:".
join(",",$args).
"不存在,请检查代码";
free999 2009-02-03
  • 打赏
  • 举报
回复
echo "参数:<pre>".print_r($array,true)."</pre>";
Zijian_Zhang 2009-02-03
  • 打赏
  • 举报
回复
void echo(string $arg1)
bool print_r(mixed $expression)
void var_dump(mixed $expression)

这三行是用法,楼主看看参数。

echo是string的(字符串),而print_r和var_dump是mixed的。
Zijian_Zhang 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 aoecal 的回复:]
引用 7 楼 wuleying 的回复:
PHP code <?phpclassstudent{private$age;//中间的一些省略掉function__get($p){if(isset($this->$p)){return($this->$p);
}elsereturn(null);
}function__set($p,$value){$this->$p=$value;
}function__call($function_name,$args){print"调用的函数:{$function_name}参数:";var_dump($args);print"不存在,请检查代码";
}
}$s=newstudent();$s->__set(age,23);$s->warrs(123);?>


如果用v…
[/Quote]

楼主可以自己试一下,数组是不能用echo直接显示出来的,要用print_r,否则别人循环数组显示,做什么东西。

print_r和var_dump都是输出关于变量的信息。

但是这个不是输出的方法,一般用来调试。
aoecal 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuleying 的回复:]
PHP code<?phpclassstudent{private$age;//中间的一些省略掉function__get($p){if(isset($this->$p)){return($this->$p);
}elsereturn(null);
}function__set($p,$value){$this->$p=$value;
}function__call($function_name,$args){print"调用的函数:{$function_name}参数:";var_dump($args);print"不存在,请检查代码";
}
}$s=newstudent();$s->__set(age,23);$s->warrs(123);?>
[/Quote]

如果用var_dump(),
那么print_r也是一样的效果。
不可以用echo直接一句输出出来吗?
aoecal 2009-02-03
  • 打赏
  • 举报
回复
......楼上
代码中我想写成一句输出..要怎么做呢?
wuleying 2009-02-03
  • 打赏
  • 举报
回复

<?php
class student{
private $age;
//中间的一些省略掉

function __get($p){
if (isset($this->$p)){
return ($this->$p);
}
else
return (null);
}
function __set($p,$value){
$this->$p=$value;
}
function __call($function_name,$args){
print "调用的函数:{$function_name}参数:";
var_dump($args);
print "不存在,请检查代码";
}
}
$s= new student();
$s->__set(age,23);
$s->warrs(123);
?>

aoecal 2009-02-03
  • 打赏
  • 举报
回复
.....问题又来了
我用zend studio又运行了一次,结果返回还是...
调用的函数:(warrs)参数(Array)不存在

汗....
难道无法输出吗?

望给出完整代码...
frj000 2009-02-03
  • 打赏
  • 举报
回复
ding
yctin 2009-02-03
  • 打赏
  • 举报
回复
var_export($args)
aoecal 2009-02-03
  • 打赏
  • 举报
回复
其实,在我用Zend Studio的时候,结果已经出来了
echo的那句的确可以输出来
但是 结果为


你所调用的函数 warrs(参数:Array
(
[0] => 123
)
)不存在!<br>
调用的函数 ,回去检查吧!<br>


怎样才能实现显示完整呢?
宇晨007 2009-02-03
  • 打赏
  • 举报
回复
$args是个数组吗,是的话echo 肯定不行吧
aoecal 2009-02-03
  • 打赏
  • 举报
回复
哈哈, 原来csdn论坛的ubb标签
code=php中的php,还是要大写
code=PHP 才行..哈哈

21,886

社区成员

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

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