Yii 기본
속성 속성
속성은 클래스의 상태를 나타내는 데 사용됩니다. 액세스 관점에서 속성과 멤버 변수 간에는 차이가 없습니다. 그런데 멤버 변수는 클래스의 구조적 구성 측면에서 개념이고, 속성은 클래스의 기능적 논리 측면에서 개념입니다.
Q: 속성과 멤버 변수의 차이점은 무엇인가요?
멤버 변수는 클래스의 구조를 반영하는 "내부" 개념입니다. 속성은 클래스의 논리적 의미를 반영하는 "외부" 개념입니다.
멤버 변수에는 읽기 및 쓰기 권한 제어가 없지만 속성은 읽기 전용 또는 쓰기 전용으로 지정하거나 읽기 및 쓰기 모두로 지정할 수 있습니다.
구성원 변수는 읽기에 대한 후처리를 수행하지 않으며 쓰기에 대한 전처리를 수행하지 않지만 속성은 수행합니다.
공용 멤버 변수는 사전 또는 사후 처리 없이 읽기 및 쓰기가 가능한 속성으로 간주될 수 있습니다. 전용 멤버 변수는 외부에서 볼 수 없고 속성의 "외부" 특성과 일치하지 않으므로 속성으로 간주할 수 없습니다.
대부분의 경우 속성은 하나 이상의 멤버 변수로 표시되지만 NAND 게이트의 출력 속성과 같은 속성과 멤버 변수 간에는 반드시 일치하는 것은 없습니다. 이에 해당하는 소위 $output 멤버 변수가 없습니다.
yiibaseObject
속성 구현
<code>class foo extends yii\base\object{ private $_title; public function setTitle($title){ $this->_title = trim($title); } public function getTitle(){ return $this->_title; } }</code>
속성을 클래스에 사용할 수 있습니다. 더 나은 캡슐화, 구성요소 입력 및 멤버 변수의 통합 관리를 달성합니다.
그러나 __get()
, __set()
은 모든 멤버 변수를 순회하며 일치하는 멤버 변수가 없을 때만 호출됩니다. 효율성은 본질적으로 멤버 변수를 사용하는 것보다 낮습니다. 데이터 구조, 데이터 컬렉션 등이 표현되고 읽기/쓰기 제어가 필요하지 않은 일부 간단한 상황에서는 멤버 변수를 속성으로 간주하여 효율성을 높일 수 있습니다.
__get() __set() 자동 호출 타이밍은 존재하지 않는 멤버 변수에 액세스할 때만 발생합니다. 따라서 멤버변수 public $title을 정의하면 getTitle(), setTitle()을 정의하더라도 호출되지 않는다. $post->title일 때 공개 $title을 직접 가리킬 것이기 때문입니다.
PHP는 클래스 메소드에 대해 대소문자를 구분하지 않습니다. 즉, 속성 이름에 대해서도 대소문자를 구분하지 않습니다.
__get() __set()은 모두 공개이며
static
의 메소드는 사용하기 쉽지 않습니다.
컴포넌트
Yii는 컴포넌트 기반 프레임워크라고 주장합니다.
yiibaseComponent
yiibaseObject
에서 상속되는 Component는 Object의 속성 메서드를 오버로드하고 이벤트와 동작도 추가합니다.
오버로드로 인해 이벤트와 동작이 추가되므로 Component의 성능은 Object에 비해 약간 떨어집니다.
객체 구성
Yii의 객체 구성 방식이 통일되어 있습니다. 모든 객체의 구성은 Object
의 __construct()
을 통해 구성됩니다. 구성의 핵심은 배열을 구성하여 속성을 구성하는 Yii::configure()
에 있습니다.
Q: 구성이 다차원 배열이면 어떻게 되나요?
Yii는
yiidiServiceLocator
:setComponents
에서 이 배열의 특정 처리를 구현합니다.
요약
yiibaseObject::__construct()
을 보면 Component 속성 로딩을 포함한 모든 객체가 4단계(처음 3단계는 한 번에 완료)로 구성되어 있음을 알 수 있습니다. ).
사전 초기화: 기본 정의는 Property
Yii::configure()
로 구성 배열을 로드하고 Property
초기화 후: init()
의 실행
클래스 메소드 호출 단계.
참고
http://www.digpage.com/
위 내용은 내용의 측면을 포함하여 Yii 소스코드 해석-속성을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.