호비시의 끄적끄적

객체 본문

Back/php

객체

호비시 2021. 4. 12. 17:09

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;

클래스명::상수명;

'Back > php' 카테고리의 다른 글

객체 확장  (0) 2021.04.12
Comments