MyExceotion에서 부모생성자 호출 시.
257
작성한 질문수 10
class MyException extends Exception
{
public function __construct()
{
parent::__construct();
}
}
try {
throw new MyException('Hello, World');
} catch (Exception $e) {
var_dump($e->getMessage());
}
class MyException extends Exception
{}
try {
throw new MyException('Hello, World');
} catch (Exception $e) {
var_dump($e->getMessage());
}
부모 생성자를 명시적으로 작성해준 경우는 empty string을 출력하고
생략할 경우는 Hello World를 출력하는데 둘의 차이점이 궁금합니다.
답변 1
1
안녕하세요!
부모 생성자가 명시적으로 호출된 클래스를 A`a 라고 하고, 그렇지 않은 클래스를 A`b 라고 지칭하겠습니다.
A`b
먼저 A`b 의 경우 생성자가 명시적으로 정의되지 않았습니다, 이 말은 객체생성시 부모 생성자를 고스란히 이어받는다는 이야기가 되며 그 원형은 아래와 같습니다.
public __construct(string $message = "", int $code = 0, ?Throwable $previous = null)
암묵적으로 호출되는 부모 생성자는 $message 라는 파라매터를 받고있는 모습입니다. new Exception("Hello, world") 로 넘어간 "Hello, world" 값이 부모 생성자의 $message 에 설정됩니다.
A`a
A`a 의 경우에는 부모 생성자를 명시적으로 호출합니다. 하지만 여기서 한 가지 빼먹은 사항이 있습니다. 바로 객체 생성시 받은 값을 부모 생성자로 전달하는 것입니다. A`a 에는 "Hello, world" 라는 값을 받아야 할 $message 가 선언되어 있지 않습니다. A`a 가 올바르게 동작하려면 파라매터를 정의하고 부모 생성자로 넘겨야합니다.
class MyException extends Exception
{
public function __construct(string $message)
{
parent::__construct($message);
}
}
PHP 는 느슨하니까 괜찮지만, 다른 언어 같았으면 A`a 와 같이 선언된 생성자에 파라매터를 넘기는 것에서 에러가 발생했을 것입니다. 아무 파라매터도 받지않는 생성자에 값을 넘겨준 것 자체가 문제가 발생할 요지가 있기 때문이죠. 이 부분은 함수에서도 고스란히 동작합니다.
패케지스트를 하지 않고 섹션7을 수행할수 있나요
0
97
1
나만의 프레임워크 작성 후, 운영환경 배포에 관한 문의 드려요
0
416
1
35강 미들웨어에서 인증 과정을 Auth클래스로 만들면, 어느 디렉토리에 둘까요?
0
352
1
ios환경에서는 어떻게 설치해야 하나요?
0
466
1
라라벨(php) 배포 문의
0
1674
1
왜 http://localhost/ 로 접근하면 public/index.php 가 실행되나요?
0
2123
1
http://localhost:8080/posts/1 접근시 배열 0값 표기 오류
0
409
1
xdebug 설치
0
673
1
localhost 경로
0
444
1
class not found
1
338
1
namespace class not found 질문
0
474
1
csrfmiddelware 에러 질문입니다
0
370
2
url Parttern Parts 가 무슨뜻인가요?
0
356
1
통합 개발환경 (IDE) 관련 문의
0
257
1
Route 클래스 질문이 있습니다!
0
302
1
모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?
0
348
1
안녕하세요 프로젝트를 react와 연동하기에 대해서 여쭈고 싶습니다 :)
1
1388
1
DatabaseSessionHandler.php 에러 해결 부분
0
305
1
안녕하세요. 라우터 서버 연결 질문이 있습니다.
1
288
1
아니 강사님 왜 자꾸 어어 거려요? 진짜 겁나 거슬려 죽겠네 ㅡㅡ 어좀 적당히해요 거슬려 죽겠네 그리고 마이크 좀 좋은거 쓰세요 볼륨이 낮아졌다 커졌ㄷ ㅏ하고 발음도 다뭉개져지고 딕션도 안 좋아서 하나도 안들려요 진짜 개짜증나네
1
585
2
로컬환경에서 개발 후 운영환경으로 배포 시 발생하는 이슈에 대한 문의입니다.
1
588
2
DatabaseSessionHandler 클래스의 gc($maxlifetime) 메소드에 대해 질문드립니다.
2
265
1
Xdebug 설치 후 php index.php 실행하면 오류가 납니다..!
0
1143
1
CentOS 7.* 서버쪽으로 배포를 해보던 중에 질문드립니다.
1
381
1





