>  기사  >  백엔드 개발  >  PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(6) CComponent 컴포넌트

PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(6) CComponent 컴포넌트

黄舟
黄舟원래의
2017-01-21 09:48:501219검색

Hangman에 정의된 GameController는 일부 속성 단어를 사용합니다. $this->word 형식을 사용하여 이 속성을 읽고 쓸 수 있지만 실제로 GameController에서 이 속성에 해당하는 메서드는

/**
* @return string the word to be guessed. This value is persistent
* during the whole game session.
*/
public function getWord()
{
return $this->getPageState('word');
}
/**
* @param string the word to be guessed. This value is persistent
* during the whole game session.
*/
public function setWord($value)
{
$this->setPageState('word',$value);
}
즉, getWord 및 setWord를 정의하여 읽기 및 쓰기 작업을 지원하는 속성 단어를 정의합니다(이름은 대소문자를 구분하지 않음). 속성을 읽으면 getWord()가 호출되고 해당 반환 값이 속성 값이 됩니다. ; 마찬가지로 속성을 작성할 때 setWord()가 호출됩니다. setter 메서드가 정의되지 않은 경우 속성은 읽기 전용이 되며 속성에 기록하면 예외가 발생합니다. getter 및 setter 메서드를 사용하여 속성을 정의하면 속성을 읽거나 쓸 때 추가 논리가 수행될 수 있다는 이점이 있습니다(예: 유효성 검사 수행, 이벤트 트리거).

속성 정의 외에도 기본 클래스 CComponent는 ASP.Net의 UI 구성 요소와 매우 유사한 이벤트 트리거도 지원합니다.

구성 요소 이벤트는 이벤트 핸들러라는 메서드를 값으로 사용하는 특수 속성입니다. 이벤트에 메서드를 연결(할당)하면 이벤트가 발생할 때 메서드가 자동으로 호출됩니다. 따라서 구성 요소 개발 중에 예상하지 못한 방식으로 구성 요소의 동작이 수정될 수 있습니다.

구성요소 이벤트는 on으로 시작하는 이름으로 정의됩니다. getter/setter 메서드를 통해 정의된 속성과 마찬가지로 이벤트 이름은 대소문자를 구분하지 않습니다. 다음 코드는 onClicked 이벤트를 정의합니다.

public function
onClicked($event){$this->raiseEvent('onClicked', $event);}

여기에서 이벤트 매개변수로 사용된 $event는 CEvent 또는 해당 하위 클래스의 인스턴스입니다.

다음과 같이 이 이벤트에 메소드를 연결할 수 있습니다.

$component->onClicked=$callback;

여기서 $callback은 유효한 PHP 콜백을 가리킵니다. 전역 함수일 수도 있고 클래스의 메서드일 수도 있습니다. 후자인 경우 배열로 제공해야 합니다: array($object,'methodName').


이벤트 핸들의 구조는 다음과 같습니다:

function methodName($event)
{
......
}

$event here 즉, 이벤트를 설명하는 매개변수입니다(raiseEvent() 호출에서 발생함). $event 매개변수는 CEvent의 인스턴스 또는 해당 서브클래스 중 하나입니다. 최소한 이벤트를 트리거한 사람에 대한 정보가 포함되어 있습니다.

버전 1.0.10부터 이벤트 핸들러는 PHP 5.3 이상에서 지원되는 익명 함수일 수도 있습니다. 예를 들어

$component->onClicked=function($event) {
......
}

지금 onClicked()를 호출하면 onClicked 이벤트가 (onClicked()에서) 시작되고 연결된 이벤트 핸들러가 자동으로 호출됩니다.

이벤트는 여러 핸들에 바인딩될 수 있습니다. 이벤트가 발생하면 이러한 핸들러는 이벤트에 바인딩된 순서대로 실행됩니다. 핸들러가 후속 핸들러가 실행되는 것을 방지하기로 결정한 경우 $event->handled를 true로 설정할 수 있습니다.

버전 1.0.2부터 구성 요소에 믹스인 지원이 추가되었으며 하나 이상의 동작을 바인딩할 수 있습니다. 동작은 특수한 상속(예: 일반 클래스 상속)이 아닌 함수를 수집하여 바인딩된 구성 요소에 의해 메서드가 상속될 수 있는 개체입니다. 구성 요소는 '다중 상속' 방식으로 상속될 수 있습니다. 여러 동작의 바인딩을 구현합니다.

동작 클래스는 IBehavior 인터페이스를 구현해야 합니다. 대부분의 동작은 CBeavior 에서 상속될 수 있습니다. 동작을 모델에 바인딩해야 하는 경우 해당 모델에 대해 특별히 바인딩 기능을 구현하는 CModelBehavior 또는 CActiveRecordBehavior에서 상속할 수도 있습니다.

비헤이비어를 사용하려면 먼저 이 비헤이비어의 attachment() 메서드를 호출하여 구성 요소에 바인딩해야 합니다. 그런 다음 구성 요소를 통해 이 동작 메서드를 호출할 수 있습니다.

// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);// test() 是行为中的方法。
$component->test();已绑定的行为可以像一个组件中的普通属性一样访问。 例如,如果一个名为 tree 的行为绑定到了一个组件,我们就可以通过如下代码获得指向此行为的引用。
$behavior=$component->tree;// 等于下行代码:
// $behavior=$component->asa('tree');行为是可以被临时禁止的,此时它的方法开就会在组件中失效.例如:
$component->disableBehavior($name);// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);// 现在就可以使用了

$comComponent->test(); 이 경우 동일한 이름을 가진 두 개의 동작이 먼저 동일한 구성 요소에 바인딩될 수 있습니다. 바인딩 작업이 우선 적용됩니다.


이벤트와 함께 사용하면 동작이 더욱 강력해집니다. 동작이 구성 요소에 바인딩되면 동작의 일부 메서드가 구성 요소의 일부 이벤트에 바인딩될 수 있습니다. 이런 방식으로 동작을 유기적으로 관찰하거나 구성 요소의 일반적인 실행 흐름을 변경할 수 있습니다.

自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 예를 들어, 동작에 xyz 속성이 있고 이 동작이 $a 구성 요소에 바인딩된 경우 $a->xyz 표현식을 사용하여 이 동작의 속성에 액세스할 수 있습니다.

위 내용은 PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(6)의 CComponent 컴포넌트 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.