2016-10-12 2 views
1

정확히 같은 방법으로 여러 라이브러리 클래스를 사용했습니다. 코딩의 두 가지 중요한 측면에 대해 조금 더 배울 것입니다. 형질과 건조.PHP 특성 - 특성에 정의 된 메서드를 사용할 수 없습니다.

나는 다음과 같은 특성을 가지고 :

<?php 

namespace App\Berry; 

trait Lib 
{ 
    public function getIDs() 
    { 
     $oClass = new \ReflectionClass(get_called_class()); 
     $aConstants = $oClass->getConstants(); 
     foreach($aConstants as $sKey => $mValue) 
     { 
      if(!is_int($mValue)) 
      { 
       unset($aConstants[$sKey]); 
      } 
     } 
     return array_values($aConstants); 
    } 
} 

다음 클래스 :

namespace App\Berry; 

use Lib; 

class postType 
{ 
    const POST_TYPE_BLOG_ID  = 1; 
    const POST_TYPE_BLOG_LABEL = __('blog', 'lib'); 

    const POST_TYPE_PAGE_ID  = 2; 
    const POST_TYPE_PAGE_LABEL = __('page', 'lib'); 

    const POST_TYPE_NEWS_ID  = 3; 
    const POST_TYPE_NEWS_LABEL = __('news', 'lib'); 
} 

이 그리고 내 PicturesController 클래스에서이처럼 호출 오전 :

$cPostTypesLibrary = new postType(); 
$this->set('aPostTypes', $cPostTypesLibrary->getIDs()); 

를 이제 나에게, 이것은 정확히 정확히 내가하는 말처럼 보인다. # 4 (사용에 관해서는 docs) 내가 가진 유일한 차이점은 내가 여기 실종 무엇 cannot use class because it is not a trait

을 얻기 때문에 내 클래스의 use 외부를 가지고있다

여러 특성)?

답변

2

당신의 클래스는 특성을 사용하지 않는 클래스를 내부의 특성 을 선언해야 똑같은 네임 스페이스로, 같은 네임 스페이스에.

특성을 올바르게 사용하려면 documentation으로 돌아가서 해당 위치를 확인하십시오. use 문은 클래스 정의 안에 있습니다. 귀하의 경우에는 다음과 같이 보일 것입니다 :

+0

좋아요. 내 게시물에 링크 된 질문을 보았습니다. 클래스가 동일한 네임 스페이스에 있지 않을 때 클래스 정의 내에서 '사용'을 추측하고 있습니까? –

+0

아니요, _trait_ 일 때 클래스 정의 안에 넣고 그 클래스가 그 특성을 사용하게하고 싶습니다. _class_를 사용하려면 _outside_하지만 클래스를 참조 할 때마다 클래스의 정규화 된 네임 스페이스를 입력하고 싶지는 않습니다. –

+0

좋아, 고마워! 지금은 이해. –

2

당신은, 당신이 대신 use 키워드의 other 사용을 사용하고부터 Lib 클래스를 가져 오려는

class postType 
{ 
    use Lib; 
} 
관련 문제