'routes/web.php'에서 '/' URL에 대한 라우트 설정 시 처리할 Handler 선언에 대한 질문입니다.
안녕하세요. '/' URL에 대한 라우트 선언 시 궁금한 점이 있어 질문드립니다.
강의 08:45 부분에서 '/' URL을 처리할 Handler로 '\App\Controllers\IndexController::index'와 같이 선언하는 것을 볼 수 있었습니다.
IndexController 클래스의 index() 메소드가 정적 메소드로 선언되어 있으므로 '::'를 사용하는 것은 이해가 되었는데요. '괄호()'를 생략했음에도 오류 없이 동작하는 이유에 대해 궁금합니다.
'\App\Controllers\IndexController::index()'와 같이 설정한 경우 오히려 에러가 출력되더라구요.

위 문법과 관련한 관련 자료도 있다면 공유 부탁드립니다.
감사합니다.
답변 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
처음 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





