PHP - 클래스와 객체 01
클래스와 객체
클래스 vs 객체 : 클래스에서 만들어 진 것이 객체이다. 클래스 : 관련 된 기능을 위해서 메소드와 멤버 변수등을 뭉쳐 놓은 것. 상속 등으로 재 사용이 쉽다. 객체 : 클래스에서 선언된 메소드와 멤버 변수 등을 가지고 있으며 사용할 수 있다. 뭐, 몰라도 사용 하라는 대로 사용할 수 만 있다면야… (문제는 클래스를 못 만들겠지….)
###
php4 VS php5
-
PHP4부터 클래스를 지원한다. (다만 클래스 프로퍼티(public, protected, private 등) 는 지원 안된다.) PHP5부터는 클래스 프로퍼티 지원.
-
PHP4 객체를 변수에 다시 할당하면 해당 객체가 복사되어 할당 됨 ($obj2 = $obj1 을 하면 $obj1이 복사되서 $obj2가 생성됨)
PHP5부터는 변수에 다시 할당해도 같은 객체를 바라보게 된다.(참조처럼 동작하지만, 엄밀하게는 참조와 다름)
보통 다른 언어에서는 PHP5처럼 동작함.
소개
기초
- 클래스는 class로 시작한다.
- 클래스 명은 대문자로 시작하는 걸 추천.
-
구분을 위한 네이밍, 소문자로 시작해도 동작에 문제는 없다.
- $this 는 객체 안에서 작업할 때 객체 본인을 참조할 경우 사용하는 예약 된 변수이다.
- **new **키워드를 사용해서 클래스에서 객체를 생성한다.
-
$obj = new ClassName();
- 클래스는 extends 키워드로 상속 받을 수 있으며, 1개의 클래스에서만 상속 받을 수 있다. 다수 상속 불가.
- class ClassName extends ElderClassName{
~~~~
} - 부모 클래스는 parent:: 로 접근할 수 있다.
프로퍼티
- 프로퍼티 : 클래스의 멤버 변수.
-
echo $obj->proerty_001; 처럼 사용 가능.
- public (어디서나 접근 가능) , protected (포함된 클래스 내부에서만, 상속 포함), private (현재 클래스 내부에서만 사용가능) 등을 앞에 붙여 사용.
- 더 자세한 것은 객체 지향 언어 관련 검색해보세요.
- 모르겠으면 public으로 우선 만들고 중요 값이다 싶으면 private 로 다른 곳에서 접근 못하도록.
- 참고로 CI의 컨트롤러에서 private 로 설정하면, URL접근이 안될 수 있다.(다른 곳에서 못 보도록 했기 때문에.)
클래스 상수
- class ClassName{
const CONSTANT = ‘CONSTANT VALUE’;
} -
표수표시 $ 가 없다!
- echo ClassName::CONSTANT; 처럼 사용.
클래스 자동로딩
- 클래스 파일 include를 자동으로 해주자… 라는 생각으로 만들어졌음.
-
function __autoload($class_name) {
include $class_name . ‘.php’;
} -
5.0부터 지원
-
include 되지 않은 클래스를 사용할려고 할 때 __autoload가 자동 호출되서 include를 시도한다.
- CLI 에서는 지원하지 않는다
- 좀더 상세한 로딩을 하고 싶으면면 spl_autoload_register() 를 생각해보아라. (5.1.2 이상부터)
생성자와 소멸자
- 생성자
- 클래스가 객체로 만들어 질 때 자동으로 호출된다.
$obj = new ClassName(); //이때 - 클래스 내부에
function __construct(){~~~~}
을 선언해주면 된다. - 보통 객체 내부 초기화에 사용된다.
-
상속시 부모의 생성자를 자동으로 호출하지는 않는다.
현재 생성자에서 수동 호출하도록 하라. -
parent::__construct();
- 소멸자
- 객체사 사라질 때 호출된다.
- 클래스 내부에
function __destruct(){~~~~}
을 선언해주면 된다. - 부모 조멸자도 자동 호출되지 않으니, 수동으로….
-
parent:: __destruct();
- 실제 사용하다가 버그 때문에 이상동작한다는 이야기가 있다. 사용에 주의하라.
가시성
- 클래스의 멤버변수와 메소드의 접근 제한을 나타낸다.
- 멤버 변수나 메소드의 선어 앞에 표시
- public $val = ‘1’;
-
public function memthodName(){~~~}
- public : 어디서나 접근 가능
protected : 포함된 클래스 내부에서만, 상속 포함
private : 현재 클래스 내부에서만 사용가능
var : public 과 같이 동작한다. PHP4 호환용으로, PHP5를 사용한다면 var을 사용하지 말라.
객체 상속
- 서브 클래스는 부모 클래스의 모든 public 과 ptorected 로 선언된 것 들을 상속 받게 된다.
-
서브 클래스에서 같은 이름으로 선언하여 재정의 할 수 있다.\
-
class SubClass extends ParentClass { ~~~ }
- SubClass 는 ParentClass 의 public 과 ptorected 로 선언된 것 들을 상속 받는다.
-
추상화에 따른 개념이며, 재사용성을 높여준다.