php 클래스 예제

By Dave Sanasack, on Aug, 02 2019

가시성 외에도 속성 및 메서드를 정적으로 선언할 수 있어 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다. 정적 속성 및 메서드는 범위 확인 연산자(::) 다음과 같이 ClassName:$property 및 ClassName::method()를 사용하여 액세스할 수 있습니다. 이 정적 메서드는 PHP 5.1.0 이후 var_export() 에서 내보낸 클래스에 대해 호출됩니다. OOP에는 실제 엔터티를 데이터(속성) 및 기능(메서드)의 템플릿에 모델링하거나 매핑하는 데 사용되는 “클래스”라는 개념이 있습니다. “개체”는 클래스의 인스턴스이며 동일한 클래스의 여러 인스턴스를 만들 수 있습니다. 예를 들어 단일 Person 클래스가 있지만 많은 사람 개체는 dan, zainab, hector 등과 같은 이 클래스의 인스턴스가 될 수 있습니다. 같은 자동차 클래스에서, 우리는 의 이름으로 세 개의 개별 객체를 만들었습니다 : 메르세데스, BMW, 아우디. 객체 지향 응용 프로그램을 작성하는 많은 개발자는 클래스 정의당 하나의 PHP 소스 파일을 만듭니다. 가장 큰 성가심 중 하나는 각 스크립트의 시작 부분에 필요한 긴 목록을 작성해야 한다는 것입니다(각 클래스마다 하나씩). 일반적으로 __autoload() 함수는 클래스를 자동으로 로드하는 데 사용되었습니다. PHP 5.1.2에서 자동 로드 클래스에 대 한 보다 유연한 대안을 제공 하는 새로운 함수 spl_autoload_register()가 도입 되었습니다.

따라서 __autoload()를 사용하는 것은 권장되지 않으며 나중에 더 이상 사용되지 않거나 제거될 수 있습니다. 클래스가 정의되면 새 키워드를 통해 클래스에서 개체를 만들 수 있습니다. 클래스 메서드 및 속성은 이 개체 인스턴스를 통해 직접 액세스할 수 있습니다. 클래스는 많은 개별 개체를 만들 수 있는 템플릿 또는 청사진 역할을 합니다. 개별 개체를 만들 때 각 개체는 특정 속성에 대해 서로 다른 값을 가질 수 있지만 동일한 제네릭 속성 및 동작을 상속합니다. 생성자는 개체를 인스턴스화할 때 자동으로 호출되는 특수 클래스 메서드입니다. 다음 몇 개의 섹션에서 개체를 인스턴스화하는 방법을 살펴보겠지만 지금은 객체를 만들 때 생성자가 개체 속성을 초기화하는 데 사용된다는 것을 알아야 합니다. 추상 클래스 내의 함수 정의에는 추상이라는 키워드가 선행되어야 합니다. 추상이 아닌 클래스 내에 추상 함수 정의를 두는 것은 불법입니다. 위의 예에서 $employee 개체는 public으로 선언된 이후 Person 클래스에 정의된 getName 및 setName 메서드에 액세스할 수 있습니다. 멤버 변수 – 클래스 내부에 정의된 변수입니다.

이 데이터는 클래스 외부에 표시되지 않으며 멤버 함수를 통해 액세스할 수 있습니다. 이러한 변수는 개체가 만들어지면 개체의 특성이라고 합니다. 자동 로드는 매우 멋지며 많은 큰 프레임 워크에서 사용되며 인스턴스화하려고 할 때 클래스가 자동으로 작성된 파일을로드 할 수 있습니다. 이 것의 장점은 인스턴스화하고 사용하려는 클래스만 페이지에 포함되며 메모리 사용량을 줄이게 된다는 것입니다. 개체 지향 프로그래밍은 개체와 클래스가 사용되는 프로그래밍에 대한 접근 방식입니다. 현재 Java 및 C++는 주로 개체 지향 프로그래밍에 사용됩니다. PHP 4에서는 개체 지향 프로그래밍의 범위가 제한되어 있었지만 PHP 5에서는 더 나은 성능과 더 많은 기능을 위해 개체 모델을 다시 작성했습니다. 이제 PHP 5에는 전체 개체 모델이 있습니다.

클래스의 정적 메서드는 몇 가지 합병증을 일으킬 수 있습니다. 정적 메서드는 사용 하는 개체의 인스턴스를 인스턴스화 하지 않고도 호출할 수 있습니다. 예를 들어 유용한 정적 함수인 site, relativeTime이 있는 경우 Site::relativeTime() 코드를 사용하여 해당 함수를 호출할 수 있습니다. 몇 가지 예와 함께 명확하다 : 다음, 다른 클래스가 이와 같은 인터페이스를 구현하는 경우 – 보호 된 속성 이나 방법은 선언되는 클래스뿐만 아니라 해당 클래스를 확장하는 클래스에서 액세스 할 수 있습니다.