2016-07-25 11 views
0

__get__setを除き、以下の例で動作するコードを書く方法は他にあります。Closureクラスメソッドの代わりに使用する方法?

class A { 
    // What code to write here? 
} 

$a = new A(); 

$a->setName = function(A $a, $value) 
{ 
    $a->name = $value; 
}; 

$a->getName = function(A $a) 
{ 
    return $a->name; 
}; 

$a->setName('Vasya'); 
echo $a->getName1(); 
+1

を...解決し、この概念は、すべての例Laravel frameworks.for有名で使われている理由 – jeremy

+0

@Jeremyルーティング –

+0

いいえ...そうではありません.... 'Illuminate \ Routing \ Route'を読んで、何が起こっているのか、そしてLaravelでもコールが静的であることを理解します:' Route :: get( '/' 、function(){ 戻るビュー( 'welcオメ '); }); '。 – Poiz

答えて

1

友人は、私はこれは間違っ何とからしい問題

class A { 
    public function __call($name, $arguments) { 
     try{ 
      if(property_exists($this,$name) && is_callable($this->$name)){ 
       $arguments = array_merge([__CLASS__=>$this],$arguments); 
       return call_user_func_array($this->$name, $arguments); 
      } 
      else{ 
       throw new Exception($name.' is not a callable'); 
      } 
     } 
     catch (Exception $e) 
     { 
      echo $e->getMessage(); 
      exit; 
     } 
    } 
} 

$a = new A(); 

$a->setName = function(A $a, $value) 
{ 
    $a->name = $value; 
}; 

$a->getName = function(A $a) 
{ 
    return $a->name; 
}; 

$a->setName('John'); 
echo $a->getName(); 

http://php.net/manual/ru/functions.anonymous.php#117504

関連する問題