recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Problème de valeur de retour de fonction anonyme

class A{}

class B{}
$a = function (){
    $a = new A();
    var_dump($a);
    return $a;
};

var_dump($a);
$b = $a(new B());

var_dump($b);

<strong>
输出:object(Closure)#1 (0) { } 
object(A)#3 (0) { } 
object(A)#3 (0) { }
</strong>


class A{}

class C{}
class B{
    public function run(){
     
        $b = function (){
            return new A();
        };
        var_dump($b);
        var_dump($this);
        return $b(new C());
    }
}
$b = new B();
var_dump($b->run());

输出:object(Closure)#2 (1) { ["this"]=> object(B)#1 (0) { } }
 object(B)#1 (0) { }
 object(A)#4 (0) { }

Ma question est la suivante : est-ce que le passage d'un objet convertit l'objet de fermeture en objet d'origine

Je suis à /a/11... et je me demande pourquoi l'objet original peut être récupéré en passant ($this).

phpcn_u1582phpcn_u15822861 Il y a quelques jours681

répondre à tous(2)je répondrai

  • ringa_lee

    ringa_lee2017-05-16 12:04:57

    Prenons simplement le premier segment de code comme exemple.
    Vous vous demandez pourquoi l'objet B transmis a complètement disparu une fois imprimé et transformé en objet A ?

    Parce que même si tu $a(new B());了,但是匿名函数没接收啊,所以内部还是直接new A();

    Exécutez ce code pour avoir une idée :

    <?php
    class A{}
    
    class B{}
    
    $a = function ($unknow = null){  //这里要接收的
        var_dump($unknow);
        return $unknow;
    };
    
    var_dump($a);
    
    $b = $a(new B());
    
    var_dump($b);

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-16 12:04:57

    class A{}
    class C{}
    class B{
        public function run(){
         
            $b = function (){
               var_dump(func_get_args());  //接收参数
                return new A();
            };
            var_dump($b);   //第一次输出 $b 闭包
            var_dump($this); //第二次输出 $this。  就是class B
            return $b(new C());
        }
    }
    $b = new B();
    var_dump($b->run());   //第三次输出  是$b这个匿名函数的返回值 class A

    $b(new C()) Votre fonction anonyme $b n'accepte pas les paramètres

    répondre
    0
  • Annulerrépondre