2016-11-11 1 views
0

if/else foreach가 여러 메소드에서 반복되었으므로이를 추상화하기로 결정했지만 복잡한 논리로 인해 막혔습니다.php에서 추상 콜백 메소드를 만들고 임의의 수의 매개 변수를 전달합니다.

enter image description here

each_cpt 방법은 다음과 같습니다

private function each_cpt($callback) { 

    //if (isset($cpts)) { 
     //foreach ($cpts as $cpt) { 
      //if ($cpt['post_type'] == $post_type) { 
       return $callback($cpt); 
      //} 
     //} 
    //} 

} 

문제는 가끔 콜백을 호출에서 추가 데이터를 전달하려는 것입니다. 예 :

/** 
* 
* 
* @since  1.0.0 
*/ 
public function vehicle_post_type_link_id($url, $post) { 

    $this->each_cpt(function($cpt){ 
     return home_url($cpt['slug'] . '/' . $post->ID . '/'); 
    }); 

    return $url; 

} 

유의 사항 $post->ID 콜백이 필요합니다. 그러나 이것은 임의적이며 다른 방법은 $post->ID이 필요하지 않습니다. 그렇다면 어떻게하면 내 상황을 다루는 적절한 추상적 방법을 만들 수 있을까요?

답변

0

PHP use 구문을 사용하여 변수를 closure으로 바인딩 할 수 있습니다. use 키워드를 사용하면 $post을 사용할 수 있습니다.

$this은 PHP 5.4부터 클로저에 자동 바인딩됩니다. 따라서 $post이 클래스의 멤버 변수 인 경우 $thisclosure에 암시 적으로 바인딩되어 있으므로 $this을 사용하여 사용할 수 있습니다.

+0

굉장! '$ this' info에 +1하십시오. –

관련 문제