반응형
Web Development · PHP Class
PHP 객체 메서드 호출 — 클래스 전체 흐름 완전 정리
클래스 선언 → 객체 생성 → 메서드 호출까지 한 파일로 보는 완성형 예제
시작 오늘 분석할 코드
HTML과 PHP를 혼합한 구조로 클래스를 선언하고, 객체를 생성해 메서드를 호출하는 전체 흐름을 담고 있다. user1.php(클래스 선언)와 user2.php(객체 생성)의 내용이 모두 합쳐진 완성형 예제다.
<HTML> <HEAD> <TITLE>클래스 테스트</TITLE> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> </HEAD> <BODY> <?php $newuser = new User(); // User 클래스의 객체 생성 → $newuser에 저장 $newuser->print_hello(); // $newuser 객체의 print_hello 메서드 호출 class User { // 클래스 선언 (new보다 아래에 있어도 동작) public $name = '철수'; // 멤버변수 public function print_hello() { print $this->name; print " 님 안녕하세요!<BR>"; } } ?> </BODY> </HTML>
실제 출력 미리보기
클래스 테스트
철수 님 안녕하세요!
용어 핵심 용어 정리
class UserUser 클래스 선언. 멤버변수 $name과 메서드 print_hello를 포함하는 설계도.
new User()User 클래스의 객체를 메모리에 생성하는 명령.
$newuser생성된 객체를 담는 변수. 이 변수로 클래스의 멤버에 접근한다.
->print_hello()객체($newuser)의 메서드를 호출하는 문법. 화살표 + 메서드명 + 괄호.
$this->name메서드 안에서 현재 객체의 $name 멤버변수에 접근하는 방법.
HTML + PHP 혼합<?php ... ?> 블록 안에 PHP 코드를 삽입하는 구조. HTML 파일에 서버 로직 추가.
public function외부에서 호출 가능한 메서드. public 없이도 동작하지만 명시 권장.
클래스 선언 순서PHP는 파싱 후 실행하므로, 클래스 선언이 new 아래에 있어도 정상 동작한다.
1 전체 실행 흐름 이해하기
클래스 선언 → 객체 생성 → 메서드 호출, 왜 이 순서인가?
PHP가 view.php를 처리하는 순서는 겉으로 보이는 코드 순서와 다소 다르다. PHP 엔진은 파일을 두 단계로 처리한다.
1
파싱(Parsing) 단계파일 전체를 훑으며 class 선언 등 구조를 파악. 이 단계에서 User 클래스를 인식.
2
실행(Execution) 단계위에서부터 순서대로 실행.
$newuser = new User()를 만나면 이미 파악된 User 클래스로 객체 생성.3
메서드 호출
$newuser->print_hello() 실행 → print_hello 메서드 내부로 진입 → $this는 $newuser → $this->name = '철수' → 출력.파싱: class User 인식
→
new User() 객체 생성
→
->print_hello() 호출
→
"철수 님 안녕하세요!" 출력
2 $this 키워드의 동작 원리
왜 $this는 "현재 객체"를 가리키나?
print_hello() 메서드 안의 $this->name에서 $this는 메서드를 호출한 객체를 자동으로 가리킨다. 이 예제에서는 $newuser->print_hello()로 호출했으므로 $this = $newuser가 된다.
$newuser->print_hello(); // 호출 // ↓ 메서드 내부에서... public function print_hello() { print $this->name; // $this == $newuser, $this->name == '철수' }
※ 객체를 여러 개 만들어 각각 메서드를 호출하면
$this가 각 객체를 가리키므로, 같은 메서드 코드로 서로 다른 객체의 데이터를 처리할 수 있다.3 HTML과 PHP의 혼합 구조
왜 HTML 안에 <?php ?> 블록이 있나?
PHP는 HTML 파일 중간에 <?php ... ?> 블록을 삽입하는 방식으로 동작한다. PHP 엔진이 파일을 처리할 때 블록 바깥은 그대로 HTML로 출력하고, 블록 안쪽만 PHP 코드로 실행한다.
| 영역 | 처리 방식 | 예시 |
|---|---|---|
<?php ... ?> 안 |
PHP 코드로 실행 | $newuser = new User(); |
| 블록 바깥 | 그대로 HTML 출력 | <FONT size="4">클래스 테스트</FONT> |
| print / echo | PHP 실행 결과를 HTML로 출력 | print "철수 님 안녕하세요!"; → 브라우저에 표시 |
⚠ 이 예제의
<FONT>, 대문자 HTML 태그(<HTML>, <BODY>)는 구식(레거시) 작성 방식이다. 현대 HTML에서는 소문자 태그와 CSS 스타일시트를 사용한다.
반응형
4 클래스 선언을 아래에 두는 것이 관례인 이유
PHP는 허용하지만 왜 "클래스 먼저"가 관례인가?
PHP는 기술적으로 클래스 선언 위치에 제한이 없지만, 실무에서는 클래스를 별도 파일에 먼저 선언하고 필요한 파일에서 require해서 사용하는 것이 표준이다.
실무 파일 분리 패턴
User.php—class User { ... }만 담음 (설계도 파일)view.php—require 'User.php';후 객체 생성·메서드 호출- 이렇게 하면 User 클래스를 여러 파일에서 재사용 가능
※ 큰 프로젝트에서는
require 대신 Composer의 오토로딩을 사용한다. 클래스명 = 파일명 규칙만 지키면 new User()만으로 파일을 자동으로 불러온다.5 메서드 호출 문법 상세
$newuser->print_hello() 를 해석하는 법
$newuser->print_hello()는 세 부분으로 구성된다.
| 부분 | 의미 | 설명 |
|---|---|---|
$newuser |
객체 변수 | new User()로 생성한 User 객체가 저장된 변수 |
-> |
접근 연산자 | 객체의 멤버(변수 또는 메서드)에 접근. Java의 점(.)에 해당 |
print_hello() |
메서드 이름 + 호출 | User 클래스에 선언된 print_hello 메서드를 호출. 괄호 필수 |
// 메서드 호출 vs 멤버변수 접근 $newuser->print_hello(); // 메서드: 괄호 () 필수 print $newuser->name; // 멤버변수: 괄호 없음, print로 출력
6 현대 방식으로 다시 쓴 같은 코드
이 예제를 현대 HTML/PHP로 쓰면 어떻게 되나?
원본 코드는 구식 HTML 태그(<FONT>, 대문자 태그)를 사용하고 있다. 동일한 기능을 현대 방식으로 작성하면 다음과 같다.
<!-- 현대 방식 view.php --> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>클래스 테스트</title> </head> <body> <?php class User { // 클래스 먼저 선언 (현대 관례) public $name = '철수'; public function print_hello() { echo $this->name . ' 님 안녕하세요!<br>'; // echo 사용 권장 } } $newuser = new User(); $newuser->print_hello(); ?> </body> </html>
※
print와 echo는 기능이 거의 같다. 단, echo는 여러 값을 콤마로 한 번에 출력할 수 있어 현대 PHP에서 더 많이 사용된다.7 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
$newuser->print_hello (괄호 생략) |
메서드가 호출되지 않고 오류 또는 아무 동작 없음 | 메서드 호출 시 항상 () 괄호 필수 |
| 클래스 선언을 조건문 안에 넣음 | 파싱 단계에서 클래스를 인식 못해 Class not found 오류 |
클래스는 항상 최상위 레벨(파일 루트)에 선언 |
print_hello() 안에서 $name 바로 사용 |
undefined variable 경고, 빈 값 출력 | $this->name으로 멤버변수에 접근 |
$newuser에 저장 안 하고 메서드 호출 시도 |
new User()->print_hello()는 PHP 5.4+에서만 동작 |
변수에 저장 후 사용하는 패턴이 호환성 높고 재사용에 유리 |
| PHP 파일인데 .html 확장자 사용 | 서버 설정에 따라 PHP 코드가 실행 안 되고 소스 그대로 출력 | PHP 코드가 있으면 .php 확장자 사용 |
핵심 한 줄 요약
클래스 전체 흐름class 선언 → new 객체 생성 → -> 메서드 호출 3단계
$newuser->print_hello()$newuser 객체의 print_hello 메서드를 호출하는 문법
$this의 역할메서드 안에서 호출한 객체 자신을 참조. $newuser로 호출 시 $this = $newuser
HTML + PHP 혼합<?php ?> 블록 안만 PHP 실행, 바깥은 HTML 그대로 출력
클래스 파일 분리실무에서는 클래스를 별도 파일로 분리하고 require로 불러와 사용
Tags
#PHP 객체 #메서드 호출 #클래스 전체 흐름 #new User #$this #-> 연산자 #HTML PHP 혼합 #클래스 선언 #OOP #PHP강의 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP 객체, 메서드 호출, 클래스 전체 흐름, new User, $this, -> 연산자, HTML PHP 혼합, OOP, PHP강의, 웹개발, 티스토리
반응형
'php' 카테고리의 다른 글
| PHP getter 메서드 — private 변수 안전 접근 완전 정리 (0) | 2026.07.08 |
|---|---|
| PHP private 멤버변수 — 외부 접근 오류 완전 정리 (0) | 2026.07.08 |
| PHP class 키워드 — 클래스 선언 완전 정리 (1) | 2026.07.08 |
| PHP 라디오버튼 — 단일 선택값 처리 완전 정리 (0) | 2026.07.08 |
| PHP select 드롭다운 — option 선택값 처리 완전 정리 (0) | 2026.07.07 |
왕진 블로그

댓글