- public
- private
- protected - 디폴트로 설정됩니다. 부모나 자식 클래스에서만 접근이 가능합니다.
$ClassInstance->property;※ getter/setter의 경우 실험적으로 도입된 성격이 강하다고 합니다.
3. final - 자식 클래스에서 클래스 또는 메소드의 오버라이딩을 막습니다. (deprecated를 나타내기 위해서 사용할 수 있습니다.)
4. ::(double colon)은 클래스의 변수, 메소드 또는 상수를 접근하기 위해서 사용됩니다.
$product = Product::find($productCode);5. 클래스 메소드는 static을 사용하여 정의합니다.
static public function encryptPassword(...){}클래스 밖에서는 ::를 사용하여 접근하나 클래스안에서는 self를 사용하여 접근이 가능합니다.
self::encryptPassword();※ 클래스 메소드, 변수에 대한 접근은 $this를 사용할 수가 없습니다.
※※ 언제 클래스 메소드를 사용하는가?
- Creation methods and factory methods
- Finder methods
- Procedural code
- Replacement for constants
7. abatract 선언을 사용할 수 있습니다.
- abstract로 정의된 클래스 또는 메소드를 바로 사용할 때 에러가 발생합니다.
- abstract로 정의된 메소드가 포함되어 있는 클래스는 abstract 클래스가 되어야 합니다.
abstract class HtmlDocument{8. CLASS Type Hints, 인자로 넘어오는 파라미터의 타입을 체크할 수 있습니다.
public function getHtml() {...}
abstract public function getContent();
}
public function addDocument(Document $document) {}
- Documnet의 인스턴스 또는 이를 상속받은 클래스의 인스턴스의 경우 정상통과가 되나 문자열(string)이나 다른 객체(Object)를 통과시킬 때 경고(Warning)을 발생시킵니다.
- 그러나, 통과된 후에Document에 정의되어 있지 않은 메소드를 호출해도 에러메시지가 발생하지는 않습니다.
- 객체들과 배열들만 체크가 가능하며 일반적인 데이타 타입(plain data type)을 체크하지는 않습니다.(예를 들면 문자열)
- Type Hint의 단점으로는 체크를 위해 사용된 클래스가 변경되는 경우 관련된 Type Hint를 모두 변경해줘야 하는 의존(dependency)이 생긴다는 점입니다.
- Type Hint가 실패한 경우 nonExistentmethod()가 호출됩니다.
public function addDocument($document) {10. 인터페이스(interface)
if(!($document instanceof Document)) {
...
}
}
interface Template {자바의 인터페이스와 비슷합니다.
public function __constuct();
public function execute();
...
}
- 클래스는 여러 인터페이스를 동시에 구현하는 것이 가능합니다 .
- 동적언어에서는 인터페이스가 없는 것과 반대로 php에서는 이를 지원합니다.
- 생성비용으로는 인터페이스 파일을 여는 비용을 제외하고는 거의 없습니다.
- 디자인을 좀 더 명확하게 나타내고 실수를 막을 수 있습니다.
- abstract와 동일한 역할을 합니다.
- 두 개의 인터페이스를 구현하는 경우, 각각의 인터페이스가 동일한 메소드를 갖지 못합니다.
- 인터페이스는 다른 인터페이스를 상속할 수 있습니다.
- 생성자(__construct())를 인터페이스에서 선언할 수 있습니다.)
class SmartyTemplate implements Template()출처: Manning, PHP in Action(Objects, Design, Agility) 보면서 요약한 내용입니다.
댓글 없음:
댓글 쓰기