局部函数的问题

madpc 2009-10-06 05:59:51
function foo($arg){
function bar(){
//这里怎样才能访问到 $arg
}
}

我发现可以这样在函数内部定义函数, 并认为很有用
但是,如何解决访问外层变量的问题? 如果是js这个问题就不存在了
...全文
237 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 madpc 的回复:]
用参数传的话,这种情况恐怕不行
function  foo($arg){
    function  bar(){
        //这里怎样才能访问到  $arg
    }
    preg_replace_callback("/a/","A","bar",$text)
}
也就是做为 preg_replace_callback 的回调函数
其实我主要是用于这种情况
[/Quote]
早把问题说清楚呀...
function  foo($arg){
function bar(){
//这里怎样才能访问到 $arg
$n = func_get_args();
print_r($n);
}

$text = 'abc';
preg_replace("/abc/ie","bar('\\0','".$arg."')",$text);
}

foo('hello world!');
madpc 2009-10-10
  • 打赏
  • 举报
回复
8楼的我自已就想到过,不可行
madpc 2009-10-10
  • 打赏
  • 举报
回复
用参数传的话,这种情况恐怕不行
function foo($arg){
function bar(){
//这里怎样才能访问到 $arg
}
preg_replace_callback("/a/","A","bar",$text)
}
也就是做为 preg_replace_callback 的回调函数
其实我主要是用于这种情况
sdlyczl 2009-10-10
  • 打赏
  • 举报
回复
学习
hukeok 2009-10-10
  • 打赏
  • 举报
回复
学习
madpc 2009-10-10
  • 打赏
  • 举报
回复
嗯,15楼的很棒

<?php
function format($text,$hs){
function bar($key,$ptn,$hs){
return $hs[$key];
}
return preg_replace("/\{\\$([^}]+?)(?::([^}]+?))?\}/ie","bar('$1','$2',\$hs)",$text);
}
echo format('I say {$text}',array('text'=>'hello world!'));
?>

我写了个东西,比较爽
zz1001 2009-10-09
  • 打赏
  • 举报
回复
参数传值!
an9ryfr09 2009-10-09
  • 打赏
  • 举报
回复
用参数传进去不就成了
an9ryfr09 2009-10-09
  • 打赏
  • 举报
回复
用参数传进去不就成了
babysc1 2009-10-09
  • 打赏
  • 举报
回复
内部局部定义的变量 用参数传递来实现 建议自己重写一个类
lgzxz999 2009-10-09
  • 打赏
  • 举报
回复
LS方法有人试过可行吗?

fxs_2008 2009-10-09
  • 打赏
  • 举报
回复
这也能用?试试

function foo($arg){
function bar(){
global $arg;
echo $arg;
//这里怎样才能访问到 $arg
}
}
jacky_hjf 2009-10-08
  • 打赏
  • 举报
回复
function foo($arg){
$val = $arg;
function bar($val){


}
}

用参数传啊
foolbirdflyfirst 2009-10-07
  • 打赏
  • 举报
回复
如果访问caller function的实参值,还有办法访问到,如果访问caller function内部定义的局部变量,恐怕就必须得直接作为参数传给内部的function了。
利用debug_backtrace函数可以往外追溯函数调用的过程。
function a($arg,$arg2)
{
function b()
{
$b = debug_backtrace();
foreach($b as $k=>$v)
{
if($v['function'] !== __FUNCTION__) print_r($v['args']);
}
}
b();
}
a('hello world','hello china');
madpc 2009-10-07
  • 打赏
  • 举报
回复
各位提到的方法我知道,但我想知道的就是这种函数套函数的情况下怎么处理,$arg的作用域是在foo之内,global不适用
tlpower 2009-10-07
  • 打赏
  • 举报
回复

$a=4;
function c(){
global $a;
$b=1;
echo $a*$b;
}
c();



在函数里面全局化变量$a就可以了

你也可以用“类”来实现这个效果……
class aa{
var $a;
function b(){
$b = 1;
echo intval($this -> a)*$b;
}
}
$obj = new aa();
$obj->a = 4;
$obj -> b();

dzxccsu 2009-10-06
  • 打赏
  • 举报
回复
在内部函数global下变量
dahaidao 2009-10-06
  • 打赏
  • 举报
回复
变量的作用域的问题.不能直接访问.

21,891

社区成员

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

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