클래스 사용법 – 9.PHP 클래스 멤버 용어

PHP 클래스 멤버의 용어 변천

클래스 멤버 PHP3 PHP4 PHP5 PHP7
상수 *1 *1 class constant class constant
변수 variable variable class member property
함수 function function method method

*1 Zend 엔진 2.0이 탑재된 PHP5부터 클래스 내에서만 사용하는 클래스 상수(class constant)를 정의할 수 있음

(PHP3 Manual의 ‘CLASS’ 내용 중) A class is a collection of variables and functions working with this variables.

(PHP4 Manual의 ‘Classes and Objects > The Basics’ 내용 중) A class is a collection of variables and functions working with these variables. Variables are defined by var and functions by function.

(PHP5 Manual의 ‘Classes and Objects > The Basics’ 내용 중) Every class definition begins with the keyword class, followed by a class name, which can be any name that isn’t a reserved word in PHP. Followed by a pair of curly braces, which contains the definition of the classes members and methods.

  • ‘Classes and Objects’ 항목 아래에 ‘Class Constants‘ 항목을 신설함
  • PHP5 매뉴얼에서는 공식적으로 클래스 멤버(class member)를 프로퍼티(property)라고 하지는 않았지만, ‘Classes/Object Functions’ 항목에서 소개하는 함수 목록을 보면 property_exists()라는 함수를 통해 클래스 멤버(class member)의 존재 유무를 확인하도록 하고 있음
  • property_exists() 함수를 통해 알 수 있듯이 프로퍼티(property)라는 의미는 클래스 상수(class constant)를 포함하지 않고 클래스 멤버 변수(class member variable)만을 지칭하며, 이러한 프로퍼티(property)의 의미는 PHP7 매뉴얼에서 명시적으로 정의하고 있음
  • 메소드(method)의 존재 유무는 method_exists(), 클래스 멤버(class member)의 존재 유무는 property_exists()를 이용하면 되지만, 클래스 상수(class constant)의 존재 유무를 확인하는 함수는 별도로 제공하고 있지 않으므로 defined(‘Foo::BAR’)와 같은 형식으로 ‘Foo’ 클래스에 ‘BAR’ 상수가 존재하는지 확인할 수 있음

(PHP7 Manual의 ‘Classes and Objects > The Basics’ 내용 중) Basic class definitions begin with the keyword class, followed by a class name, followed by a pair of curly braces which enclose the definitions of the properties and methods belonging to the class. …… A class may contain its own constants, variables (called “properties”), and functions (called “methods”).

  • ‘Classes and Objects’ 항목 아래에 ‘Properties‘ 항목을 신설함

(PHP7 Manual의 ‘Classes and Objects > Properties‘ 내용 중) Class member variables are called properties. They may be referred to using other terms such as fields, but for the purposes of this reference properties will be used.

  • 클래스 멤버 변수(class member variable)를 프로퍼티(property)라고 호칭함

클래스 상수(class constant)

PHP는 클래스 상수를 멤버 변수의 개념과는 별개로 const 키워드를 이용하여 정의하여 사용할 수 있도록 하고 있습니다.

const로 정의된 클래스 상수는 새로운 값으로 치환될 수 없습니다. 이러한 면에서는 const 키워드에 의해 선언되는 C++의 상수와 유사합니다. 그러나 PHP와는 다르게 C++의 const 키워드에 의해 선언되는 클래스 상수는 새로운 값으로 치환될 수 없다는 것만 빼면 아래의 예와 같이 다른 모든 변수들의 가지는 성질을 그대로 가지게 됩니다.

반면에 PHP에서 const로 정의된 클래스 상수는 항상 public 가시범위(visibility)를 가지기 때문에 public, protected, private와 같은 modifier를 지정할 수 없으며*2, 생성된 인스턴스로 접근이 불가능하며 클래스 상수를 사용하기 위해서는 self, parent, static 키워드 또는 클래스명을 통해서만 접근해야 합니다. 인스턴스 생성 없이 접근할 수 있는 정적 멤버를 만드는 static 키워드도 클래스 상수에는 사용할 수 없으며, static을 지정하게 되면 치명적인 오류가 발생하게 됩니다.

*2 PHP 7.1.0 부터 visibility modifier(public, protected, private)를 허용하고 있습니다.

C++과 자바에서는 클래스 상수(class constant)가 별도의 개념이 아니라 멤버 변수를 상수화 시킴으로 이를 처리하고 있습니다. C++에서는 멤버 변수에 const 키워드를 지정함으로 상수화 할 수 있습니다.

자바에서는 상수는 아니지만 단 한번만 값을 할당할 수 있다는 의미에서 상수처럼 사용할 수 있도록 멤버 변수에 final을 지정해 줍니다.

답글 남기기