inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

PHP 7+ 프로그래밍: 객체지향

33 - MVC(Model, View, Controller)

'routes/web.php'에서 '/' URL에 대한 라우트 설정 시 처리할 Handler 선언에 대한 질문입니다.

해결된 질문

239

Henu

작성한 질문수 66

2

안녕하세요. '/' URL에 대한 라우트 선언 시 궁금한 점이 있어 질문드립니다.

 

강의 08:45 부분에서 '/' URL을 처리할 Handler로 '\App\Controllers\IndexController::index'와 같이 선언하는 것을 볼 수 있었습니다.

 

IndexController 클래스의 index() 메소드가 정적 메소드로 선언되어 있으므로 '::'를 사용하는 것은 이해가 되었는데요. '괄호()'를 생략했음에도 오류 없이 동작하는 이유에 대해 궁금합니다.

 

'\App\Controllers\IndexController::index()'와 같이 설정한 경우 오히려 에러가 출력되더라구요.

 

 

위 문법과 관련한 관련 자료도 있다면 공유 부탁드립니다.

 

감사합니다.

php PHP7 oop framework

답변 1

1

정상우

Function Call by Name

안녕하세요. 혹시 자바스크립트를 해본적 있으신가요? 자바스크립트에서 이름이 지정된 함수를 넘겨주려면 아래와 같이 할 수 있죠?

function foo (message) { console.log(message); }

class A {
    static bar (cb) {
        cb('Hello, world');
    }
}

A.bar(foo); // Hello, world

PHP 에서 아래의 코드는 동작할까요?

function foo($message) { var_dump($message); }

class A
{
    public static function bar($cb)
    {
        $cb('Hello, world');
    }
}

A::bar(foo); // Hello, world

이 코드는 오류가나지는 않습니다. 그러나 A::bar() 에 넘겨준 값, foo 를 상수로 인식한다는 문제가 있어 경고를 던집니다.

PHP Notice:  Use of undefined constant foo - assumed 'foo' 

Variable Functions in PHP

위 호출 코드는 아래와 같이 바꿔볼 필요가 있습니다.

A::bar('foo'); // Hello, world

이렇게 처리할 수 있는 것은 무엇 때문일까요? 바로 PHP 언어의 기능 중 하나인 가변 함수(Variable Functions) 기능이 동작했기 때문입니다. 문자열 형태지만 함수의 이름을 넘겨주는 것으로 호출이 가능케 되었습니다.

이 점을 생각해보았을 때, 라우터에서 정의한 IndexController::index 는 단순 문자열처럼 보이지만 함수의 이름을 나타냅니다. 반면 IndexController::index() 로 사용하면 호출을 의미하므로 동작하지 않습니다. 애초에 함수의 이름으로 인지하지 않습니다. 이해가 되셨으면 좋겠군요 :)

0

Henu

처음 Javascript로 빗대어 표현해 주시니 한방에 이해가 갔습니다.

PHP에서도 정의된 함수를 특정 함수의 매개변수로 전달할 수 있다는 것을 처음 알게 되었네요.

Javascript와의 차이점은 문자열로 보내야 상수에 관련된 Warning이 안나는 점이네요. 

감사합니다.

패케지스트를 하지 않고 섹션7을 수행할수 있나요

0

90

1

나만의 프레임워크 작성 후, 운영환경 배포에 관한 문의 드려요

0

403

1

35강 미들웨어에서 인증 과정을 Auth클래스로 만들면, 어느 디렉토리에 둘까요?

0

335

1

ios환경에서는 어떻게 설치해야 하나요?

0

448

1

라라벨(php) 배포 문의

0

1655

1

왜 http://localhost/ 로 접근하면 public/index.php 가 실행되나요?

0

2105

1

http://localhost:8080/posts/1 접근시 배열 0값 표기 오류

0

399

1

xdebug 설치

0

669

1

localhost 경로

0

441

1

class not found

1

328

1

namespace class not found 질문

0

466

1

csrfmiddelware 에러 질문입니다

0

366

2

url Parttern Parts 가 무슨뜻인가요?

0

349

1

통합 개발환경 (IDE) 관련 문의

0

248

1

Route 클래스 질문이 있습니다!

0

297

1

모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?

0

341

1

안녕하세요 프로젝트를 react와 연동하기에 대해서 여쭈고 싶습니다 :)

1

1378

1

DatabaseSessionHandler.php 에러 해결 부분

0

299

1

안녕하세요. 라우터 서버 연결 질문이 있습니다.

1

282

1

아니 강사님 왜 자꾸 어어 거려요? 진짜 겁나 거슬려 죽겠네 ㅡㅡ 어좀 적당히해요 거슬려 죽겠네 그리고 마이크 좀 좋은거 쓰세요 볼륨이 낮아졌다 커졌ㄷ ㅏ하고 발음도 다뭉개져지고 딕션도 안 좋아서 하나도 안들려요 진짜 개짜증나네

1

575

2

로컬환경에서 개발 후 운영환경으로 배포 시 발생하는 이슈에 대한 문의입니다.

1

578

2

DatabaseSessionHandler 클래스의 gc($maxlifetime) 메소드에 대해 질문드립니다.

2

262

1

Xdebug 설치 후 php index.php 실행하면 오류가 납니다..!

0

1136

1

CentOS 7.* 서버쪽으로 배포를 해보던 중에 질문드립니다.

1

373

1