php oop의 기본2
php 클래스의 기본2
앞의 내용에 이어서 클래스의 접근제한자와 전연변수의 접근에 대해서 학습.
자동차 클래스
앞에서 블랙박스를 만들었으니 이번에는 자동차를 만들어보자.
자동차 클래스에는 자동차의 종류(세단), 색상, 페달이 존재하며 자동차객체가 만들어 진 이후에 접근하여 동작 해 보자.
<?php header("Content-type:text/html;charset=utf-8"); class CarClass { public static $carType = '세단'; const color = "Red"; private $doArr = array("accel"=>"가속","brake"=>"정지"); public function CarClass() { echo "CarClass constructor <br />"; } public function info() { //print self::$carType . "<br />"; print self::color . "<br />"; } public function handler($pedal) { $doArr = $this->doArr; echo $doArr[ $pedal ] . "<br />"; } } $a = new CarClass(); echo CarClass::$carType ."<br />"; $a -> info(); $a -> handler("accel"); ?>
1 : 한글을 깨지지않고 출력하기 위해서 utf8로 인코딩 설정.
4 : CarClass 생성.
6 : static 변수는 인스턴스를 생성하지않은 클래스자체로 참조하여 접근가능한 변수이다. 그만큼 메모리를 많이 차지 하게 되며
물론 CarClass내부에서도 static 변수를 쓸 수있다.
당연히 static은 외부(클래스를 벗어난)에서 사용가능 해야하므로 접근제한자는 public 이다.
7 : 상수는 const로 선언하며 '$'라는 변수의미 없이 순수한 상수 문자로 적어준다.
9 : 접근제한자가 private - 오로지 클래스 내부에서만 사용가능하며 상속하더라도 쓸 수 없다.
변수의 형태를 보면 연관배열로 되어있어 보통 일반배열로 작성한 경우 $doArr = Array("가속", "정지"); 로 쓰게되고
$doArr[0], $doArr[1].. 과 같은 방식으로 접근한다. 일반배열의 장점은 반복문을 사용할 수 있다는 장점이 있고
연관배열은 내용을 쉽게 파악할수 있는 대신 직접 네이밍을 적어줘야 하므로 코드가 길어진다.
11 : 생성자 함수. 앞에서는 __construct를 썼는데 클래스 이름을 적어줘도 된다.
16 : info메서드.
carType과 color에 대한 정보를 출력하는데 일단 carType은 주석처리 되었다.
static변수나 상수 모두 'self::변수/상수'로 접근한다.
22 : handler메서드.
페달여부의 함수인데 여기서 주목해야 할 점은 클래스 전역변수인 9번째 줄의 $doArr 배열을 '$this->doArr'로 접근해야 한다.
이후 핸들러 함수내부의 $doArr 9번째 줄의 변수와는 다른 변수이며 여기에 $this->doArr를 대입하여 동일한 scope를 갖게된다.
29 : $a에 자동차 클래스를 만든다.
31 : static으로 선언된 변수에 접근하기 위해서는 '클래스명::$변수'의 형식으로 선언한다.
32 : 클래스의 메서드를 호출할 경우 '클래스->메서드' 형태로 작성.
33 : 마지막으로 핸들러에 페달을 accel로 넘겨주었다.
출력
carClass constructor
세단
Red
가속