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 구성 요소와 매우 유사한 이벤트 트리거도 지원합니다.
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(); 이 경우 동일한 이름을 가진 두 개의 동작이 먼저 동일한 구성 요소에 바인딩될 수 있습니다. 바인딩 작업이 우선 적용됩니다.