2017-10-21 12 views
1

특성을 사용한다는 아이디어가 처음입니다. 내 이해는 동작을 클래스에서 수평 적으로 공유 할 수 있다는 것입니다. 내 프로젝트에서 다음 코드는 모든 클래스의 맨 위에서 반복적으로 사용됩니다.특성 생성자에서 정의되지 않은 변수

class Loader { 

    protected $options; 

    /** 
    * Loader constructor. 
    */ 
    public function __construct() { 
     $this->options = get_option('xenword_options'); 
     $this->init(); 
    } 

이 작업은 수십 개의 클래스로 수행되므로 특성을 구축하는 것이 바람직한 방향일까요?

이것은 실패한 시도입니다. Options.php라는 파일을 만들었습니다. 내용은 다음과 같습니다.

trait getOptions { 
    public $options; 

    public function __construct() { 
     $this->$options = get_option('xenword_options'); 
    } 
} 

불행히도 PhpStorm은 Undefined variable 'options.'라는 메시지를 표시합니다. 이 코드가 클래스 구조에있는 경우에는 문제가되지 않습니다.

저는 특성에 익숙하지 않았기 때문에 조언과 조언을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

1

거의 다 왔어.

@SignpostMarv는 구문 오류가 발생하지 때문에 $this->$option은,이 잘못되었다는 부분에서 권리이지만, $에 오타가 있기 때문에, ->options하지 ->$options (당신이 http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b를 확인하실 수 있습니다)해야한다.

그리고 지금 당신이 특성을 가지고 당신이 그것을 테스트하기 위해 클래스

class Loader { 
    use starter; 
} 

trait starter { 
    protected $options; 

    public function __construct() { 
     $this->options = 'xenword_options'; 
     $this->init(); 
    } 

    public function init() { 
     $myClass = __CLASS__; 
     echo "{$myClass} started"; 
    } 
} 

에 포함해야한다는 메시지를 볼 수 new Loader()을한다. (확인 : http://sandbox.onlinephpfunctions.com/code/55b517142fb8d74b8b5a3e2246c79b6428330297를)

+0

감사합니다! 나는 절대적으로 $를 놓쳤다. – LPH

0

$ this -> $ options는 구문 오류입니다.

$ this-> options을 원하십니까?

+0

_ $이 -> $ 옵션이 사실이 아니라는 구문 error._입니다 (확인 : http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b를) – mloureiro

+0

을 나는 구문이 다른거야 방법; $ options는 범위 내에 존재하지 않으므로 오류가 발생합니다. $ this-> options를 사용하고 싶다. – SignpostMarv