Yii 애플리케이션은 구성 요소를 기반으로 구축되었습니다. 구성 요소는 CComponent 또는 해당 하위 클래스의 인스턴스입니다. 구성 요소를 사용하는 것은 주로 해당 속성에 액세스하고 이를 트리거하거나 처리할 시기를 포함합니다. 기본 클래스 CComponent는 속성과 이벤트가 정의되는 방법을 지정합니다.
컴포넌트의 속성은 객체의 공용 멤버 변수와 같습니다. 읽고 쓸 수 있습니다. 예:
$width=$component->textWidth; // 获取 textWidth 属性 $component->enableCaching=true; // 设置 enableCaching 属性
구성 요소 속성을 정의하려면 구성 요소 클래스에서 공용 멤버 변수만 정의하면 됩니다. . 더 유연한 방법은 getter 및 setter 메서드를 정의하는 것입니다. 예를 들면 다음과 같습니다.
public function getTextWidth() { return $this->_textWidth; } public function setTextWidth($value) { $this->_textWidth=$value; }
위 코드는 쓰기 가능한 메서드를 정의합니다. 속성 이름은 textWidth
입니다(이름은 대소문자를 구분하지 않음). 속성을 읽으면 getTextWidth()
이 호출되고 해당 반환 값은 속성 값이 됩니다. 마찬가지로 속성을 쓰면 setTextWidth()
이 호출됩니다. setter 메서드가 정의되지 않은 경우 속성은 읽기 전용이 되며 속성에 기록하면 예외가 발생합니다. getter 및 setter 메서드를 사용하여 속성을 정의하면 속성을 읽거나 쓸 때 추가 논리가 수행될 수 있다는 이점이 있습니다(예: 유효성 검사 수행, 이벤트 트리거).
참고: getter/setter를 통해 정의된 속성과 클래스 멤버 변수 사이에는 미묘한 차이가 있습니다. 전자 이름은 대소문자를 구분하지만 후자 이름은 대소문자를 구분합니다.
컴포넌트 이벤트는 事件句柄 (event handlers)
라는 일부 메소드를 값으로 사용하는 특수 속성입니다. 이벤트에 메서드를 연결(할당)하면 이벤트가 발생한 위치에서 메서드가 자동으로 호출됩니다. 따라서 구성 요소 개발 중에 예상하지 못한 방식으로 구성 요소의 동작이 수정될 수 있습니다.
구성 요소 이벤트는 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
는 이벤트를 설명하는 매개변수입니다(raiseEvent()
호출에서 가져옴). $event
매개변수는 CEvent 또는 해당 하위 클래스의 인스턴스입니다. 최소한 이벤트를 트리거한 사람에 대한 정보가 포함되어 있습니다.
버전 1.0.10부터 이벤트 핸들러는 PHP 5.3 이상에서 지원되는 익명 함수일 수도 있습니다. 예를 들어,
$component->onClicked=function($event) { ...... }
이제 onClicked()
를 호출하면 onClicked
이벤트가 트리거됩니다( ) 첨부된 이벤트 핸들러가 자동으로 호출됩니다. onClicked()
동작은 특수 상속(예: 일반 클래스 상속)이 아닌 함수를 수집하여 바인딩된 구성 요소에 의해 메서드를 구현할 수 있는 개체입니다. 여러 동작의 바인딩을 구현하는 데 사용됩니다. 继承(inherited)
동작 클래스는 IBehavior 인터페이스를 구현해야 합니다. 대부분의 동작은 CBehavior 에서 상속될 수 있습니다. 동작을 모델에 바인딩해야 하는 경우 해당 모델에 대해 특별히 바인딩 기능을 구현하는 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); // 现在就可以使用了 $component->test();
两个同名行为绑定到同一个组件下是有可能的。在这种情况下,先绑定的行为则拥有优先权。
当和 events, 一起使用时,行为会更加强大。当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就可以观察或者改变组件的常规执行流程。
自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 例如, 若一个行为有一个 xyz 的属性,此行为被绑定到组件 $a,然后我们可以使用表达式 $a->xyz
访问此行为的属性。
以上就是Yii框架官方指南系列10——基础知识:组件的内容,更多相关内容请关注PHP中文网(www.php.cn)!