V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
suckli
V2EX  ›  PHP

PHP 5.3 回调函数里面怎么使用this

  •  
  •   suckli · 2013-08-23 20:31:19 +08:00 · 5092 次点击
    这是一个创建于 4128 天前的主题,其中的信息可能已经有所发展或是发生改变。
    貌似是无解啊,试了好多种办法都不行~
    9 条回复    1970-01-01 08:00:00 +08:00
    shiny
        1
    shiny  
       2013-08-23 20:46:02 +08:00
    php5.3 不是有闭包吗,可以吗?
    shiny
        2
    shiny  
       2013-08-23 20:48:13 +08:00
    看花眼了,贴下代码看看?
    bixuehujin
        3
    bixuehujin  
       2013-08-23 21:11:15 +08:00
    $self = $this;
    $func = function() use ($self) {
    //some stuff with $self
    }

    这样就好
    clippit
        4
    clippit  
       2013-08-23 21:49:13 +08:00
    PHP Changelog:

    5.4.0 $this can be used in anonymous functions.
    suckli
        5
    suckli  
    OP
       2013-08-24 00:11:03 +08:00 via iPad
    @bixuehujin 这样可以吗?

    @clippit 这个我知道,但是我不能升级啊
    clippit
        6
    clippit  
       2013-08-24 00:18:15 +08:00   ❤️ 1
    @suckli 语言特性所限,应该没有什么办法吧…… @bixuehujin 的那种办法可能可以使用,但是最多只能访问到public的方法,protected和private肯定不行的
    bombless
        7
    bombless  
       2013-08-24 22:29:22 +08:00
    让类成员函数来返回闭包不就行了……爱干什么干什么。
    suckli
        8
    suckli  
    OP
       2013-08-24 22:50:16 +08:00
    @bombless 求例子
    suckli
        9
    suckli  
    OP
       2013-08-24 22:55:48 +08:00
    @bixuehujin
    @clippit
    试了一下,@bixuehujin 的方式的确靠谱
    这里贴一个简单的例子
    <?php
    class B {
    public function funca() {
    $self = $this;
    $b = function($arg1, $arg2) use($self) {
    echo $arg1;
    echo $arg2;
    $self->funcb();
    };
    echo '123';
    $b('arg1','arg2');
    }

    public function funcb() {
    echo 'echo from b function';
    $this->funcc();
    }

    private function funcc() {
    echo 'echo from c function';
    }
    }
    $test = new B;
    $test->funca();
    ?>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   696 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:00 · PVG 06:00 · LAX 14:00 · JFK 17:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.