액세스 제어(가시성)
PHP의 액세스 제어에는 공개(public), 보호(protected) 및 비공개(private)가 포함됩니다.
공개로 정의된 클래스 멤버는 어디서나 액세스할 수 있습니다. .
protected로 정의된 클래스 멤버는 자체, 하위 클래스 및 상위 클래스에서 액세스할 수 있습니다.
private으로 정의된 클래스 멤버는 해당 멤버가 정의된 클래스에서만 액세스할 수 있습니다.
을 수정하는 데 사용할 수 없습니다. class
클래스 속성은 생략할 수 없으며 public, protected, private 중 하나로 정의해야 합니다.
클래스의 메소드에 이러한 키워드가 설정되지 않은 경우 해당 메소드는 기본적으로 공개됩니다.
동일한 클래스의 개체는 동일한 인스턴스가 아니더라도 서로의 private 및 protected 멤버에 액세스할 수 있습니다. 이는 이러한 개체의 내부 구현 세부 정보가 알려져 있기 때문입니다.
속성
->(객체 연산자) 사용: $this->property(여기서 property는 속성의 이름입니다). -정적 속성. 정적 속성은 ::(이중 콜론)을 사용하여 액세스됩니다. self::$property
$this는 호출 개체에 대한 참조입니다.
클래스 상수
은 클래스 내에서 항상 변하지 않는 값을 상수로 정의할 수 있습니다. 상수를 정의하고 사용할 때 $ 기호를 사용할 필요는 없습니다.
상수의 값은 변수, 클래스 속성, 수학 연산 또는 함수 호출의 결과가 아닌 고정된 값이어야 합니다
이중 콜론 사용 ::Access
<code>const constant = 'constant value'; </code>
클래스 자동 로딩
많은 개발자는 객체 지향 애플리케이션을 작성할 때 각 클래스 정의에 대해 PHP 소스 파일을 만듭니다. 각 스크립트의 시작 부분에 포함 파일의 긴 목록(클래스당 하나의 파일)을 작성해야 한다는 점은 큰 성가신 일입니다.
PHP 5에서는 더 이상 필요하지 않습니다. 아직 정의되지 않은 클래스를 사용하려고 할 때 자동으로 호출되는 spl_autoload_register()
함수를 정의할 수 있습니다. 이 함수를 호출하면 스크립팅 엔진은 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 갖게 됩니다.
<code><?php // function __autoload($class) { // include 'classes/' . $class . '.class.php'; // } function my_autoloader($class) { include 'classes/' . $class . '.class.php'; } spl_autoload_register('my_autoloader'); // 或者,自 PHP 5.3.0 起可以使用一个匿名函数 spl_autoload_register(function ($class) { include 'classes/' . $class . '.class.php'; }); ?> </code>
생성자 및 소멸자
생성자 및 소멸자는 엔진에서 암시적으로 호출되지 않습니다. 상위 클래스의 생성자와 소멸자를 실행하려면 자동 로딩이 아닌 이상 하위 클래스의 생성자 본문과 소멸자 본문에서 parent::__construct(); parent::__destruct()
inherited
키워드 extends
abstract
<code><?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?> </code>use 문의 여러 특성을 쉼표로 구분하여 나열
<code><?php trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } } ?> </code>
__destruct()
__call()
__callStatic()
__get()
__세트()
__isset()
__unset()
__sleep() serialize() 함수는 클래스에 매직 메서드 __sleep()이 존재하는지 확인합니다. 존재하는 경우 이 메서드가 먼저 호출된 다음 직렬화 작업이 수행됩니다.
__wakeup() unserialize()는 __wakeup() 메서드가 있는지 확인합니다. 존재하는 경우 __wakeup 메소드가 먼저 호출됩니다
__toString()은 클래스가 문자열로 처리될 때 클래스가 어떻게 응답해야 하는지 설명하는 데 사용됩니다.
__invoke() 함수를 호출하여 객체를 호출하려고 하면 __invoke() 메서드가 자동으로 호출됩니다.
__set_state() 이 정적 메서드는 클래스를 내보내기 위해 var_export()가 호출될 때 호출됩니다.
__clone()
__debugInfo() var_dump()는 객체가 사용될 때 호출됩니다.
이러한 함수를 PHP에서는 "매직 메소드"라고 합니다. 마법 기능을 사용하려는 경우가 아니면 자체 클래스 메서드 이름을 지정할 때 이러한 메서드 이름을 사용할 수 없습니다.
액세스할 수 없는 속성에 값을 할당하면 __set()가 호출됩니다.
액세스할 수 없는 속성의 값을 읽을 때 __get()이 호출됩니다.
__isset()은 액세스할 수 없는 속성에 대해 isset() 또는 empty()가 호출될 때 호출됩니다.
액세스할 수 없는 속성에 대해 unset()이 호출되면 __unset()이 호출됩니다.
객체에서 액세스할 수 없는 메서드가 호출되면 __call()이 호출됩니다.
정적 모드에서 액세스할 수 없는 메서드를 호출하면 __callStatic()이 호출됩니다.
최종 키워드
부모 클래스의 메서드가 final로 선언되면 하위 클래스가 해당 메서드를 재정의할 수 없습니다. 클래스가 final로 선언되면 상속될 수 없습니다.
속성은 final로 정의할 수 없으며 클래스와 메소드만 final로 정의할 수 있습니다
객체 복사
clone 키워드를 통해 객체 복사가 가능합니다(만약 아마도 이는 객체의 __clone() 메서드를 호출할 것입니다. 객체의 __clone() 메서드는 직접 호출할 수 없습니다.
객체 비교
비교 연산자(==)를 사용하여 두 객체 변수를 비교할 때 비교 원칙은 두 객체의 속성과 속성값이 일치하는 경우입니다. 동일하며 두 개체가 동일한 클래스의 인스턴스인 경우 두 개체 변수는 동일합니다.
항등 연산자(===)를 사용하는 경우 이 두 객체 변수는 특정 클래스의 동일한 인스턴스(즉, 동일한 객체)를 가리켜야 합니다.
유형 제약 조건
PHP 5에서는 유형 제약 조건을 사용할 수 있습니다. 함수 매개변수는 객체(함수 프로토타입에 클래스 이름 지정), 인터페이스, 배열(PHP 5.1부터) 또는 호출 가능(PHP 5.4부터)으로 지정할 수 있습니다. 그러나 매개변수의 기본값으로 NULL을 사용하는 경우에도 함수 호출 시 실제 매개변수로 NULL을 사용할 수 있습니다.
int 또는 string과 같은 스칼라 유형에는 유형 제약 조건을 사용할 수 없습니다. 특성도 허용되지 않습니다.
타입 제약은 클래스 멤버 함수뿐만 아니라 함수에서도 사용됩니다.
객체 직렬화
PHP의 모든 값을 사용할 수 있습니다. 직렬화 함수 ()는 표현할 바이트 스트림을 포함하는 문자열을 반환합니다. unserialize() 함수는 문자열을 PHP의 원래 값으로 다시 변경할 수 있습니다. 객체를 직렬화하면 객체의 모든 변수가 저장되지만 객체의 메소드는 저장되지 않습니다.
저작권: 이 글은 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.
위 내용은 PHP의 객체지향을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.