호비시의 끄적끄적
객체 본문
PHP 객체
클래스 구문
메서드
클래스에 정의된 함수
속성
클래스에 정의된 변수
인스턴스
생성된 객체 (new 연산자로 생성)
<?php
class ClassA{
public $a = 1; //클래스에 정의되어 있는 변수 = 속성
public $b = 2;
public function method($a, $b){ // 클래스에 정의되어 있는 함수 = 메서드
$c = $a + $b;
return $c; // 반환값
}
}
$obj = new ClassA(); //생성한 객체 obj= 인스턴스
echo $obj -> a; // -> 로 속성에 접근
echo $obj->method(1,2);
?>
생성자 __construct
객체가 생성될 때 자동으로 호출되는 메서드(함수)
반환값 없음
보통 초기 처리 작업에 사용 ex)값의 초기화
<?php
class ClassA{
public function __construct($a, $b){
echo "생성자 호출<br>";
echo "a : {$a}<br>";
echo "b : {$b}<br>";
}
}
$obj = new ClassA(1,2);
?>
정적메서드
정적 static
생성하지 않고 접근이 가능
생성하지 않으므로 $this가 없다.
클래스 명으로 접근 가능
(클래스명::정적메서드)
자바스크립트의 prototype과 유사함
<?php
class ClassA{
public function method1(){
echo __METHOD__."<br>"; //클래스 명과 메소드 명을 출력
//$this가 있다.
//생성한 후에 호출되기 때문에
}
public static function staticMethod1(){
//생성하지 않으므로 $this가 없다.
echo __METHOD__."<br>";
}
}
$obj = new ClassA():
$obj->method1(); //반드시 생성해야 접근 가능
//생성할 필요 없이 접근 가능
ClassA::staticMethod1();
?>
실제 메모리 상의 구조를 살펴보면
코드 & 상수 영역 정적인 영역( 고정 영역 ) |
런타임 영역 ( 동적인 영역 ) |
$obj1= new Object(); 가 실행되면
$obj1가 런타임 영역(동적인 영역)에 일정 부분 할당 된다.
생성이 된 후에 할당 되기 때문에 생성전에는 클래스 내부의 메서드나 속성에 접근 할 수 없다.
하지만 정적 메서드는 클래스 선언과 동시에 정적인 영역에 할당 되기 때문에
객체를 생성해서 런타임 영역에 할당하지 않아도 정적인 영역을 통해 접근이 가능하다.
클래스 상수
const a=1;
클래스명::상수명;
Comments