제너레이터 강의 내용중 Iterator 인터페이스를 구현한 NumberInterator 클래스 선언시 생성자 메소드를 사용하는 부분에 대한 질문입니다.
안녕하세요.
제너레이터 강의 내용중 아래 이미지와 같이 Iterator 인터페이스를 구현한 NumberInterator 클래스 선언시 생성자 메소드를 사용하는 부분에서 $this 키워드를 이용하여 각 property들에 대한 초기화를 시켜주는 구문을 확인해 볼 수 있었는데요.

여기서 한가지 이해가 되지 않는 부분이 있어서 질문을 작성합니다.
NumberIterator 클래스의 경우 클래스의 프로퍼티로는 $i만 가지고 있는데, 생성자 메소드를 통해 선언되어 있지 않는 'start', 'end', 'step'에 대해 값을 설정해 줬음에도 불구하고 컴파일 에러가 발생하지 않는 이유가 궁금합니다.
예상되는 것은 PHP에서 지원하는 어떠한 문법이 존재하고 생성자 메소드를 사용함으로써 NumberIterator 클래스의 객체가 생성되는 시점에 생성자 메소드가 호출되고 나서 에 $start, $end, $step이라는 프로퍼티가 클래스에 추가되는(?) 것 같은데,
이 원리가 맞다면 이러한 내용은 어떤 용어로 검색을 해봐야 정확한 내용을 알 수 있을까요?
답변 1
2
안녕하세요. 네, 맞습니다. PHP 는 다소 느슨한 언어이기 때문에 사실 생성자에서 지정만 해주더라도 명시적 선언없이 초기화를 진행할 수 있게 되어있습니다. 자바스크립트에서도 비슷한 동작이 있긴 합니다만, 이는 그냥 생성자에서 프로퍼티를 초기화해주는 것 이상의 의미는 없습니다. 별도의 용어는 저도 잘 모르겠고, '생성자에서 프로퍼티 또는 필드 선언 및 초기화'과정 중 하나일 뿐이라고 생각하시면 편합니다. 다만 저 기능에 대해 PHP 8 에서는 흥미로운 기능이 추가 된 바 있습니다. 'PHP Constructor Promotion' 기능을 참고해보시기 바랍니다 :)
패케지스트를 하지 않고 섹션7을 수행할수 있나요
0
90
1
나만의 프레임워크 작성 후, 운영환경 배포에 관한 문의 드려요
0
399
1
35강 미들웨어에서 인증 과정을 Auth클래스로 만들면, 어느 디렉토리에 둘까요?
0
335
1
ios환경에서는 어떻게 설치해야 하나요?
0
446
1
라라벨(php) 배포 문의
0
1651
1
왜 http://localhost/ 로 접근하면 public/index.php 가 실행되나요?
0
2102
1
http://localhost:8080/posts/1 접근시 배열 0값 표기 오류
0
397
1
xdebug 설치
0
667
1
localhost 경로
0
441
1
class not found
1
327
1
namespace class not found 질문
0
466
1
csrfmiddelware 에러 질문입니다
0
363
2
url Parttern Parts 가 무슨뜻인가요?
0
349
1
통합 개발환경 (IDE) 관련 문의
0
246
1
Route 클래스 질문이 있습니다!
0
297
1
모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?
0
340
1
안녕하세요 프로젝트를 react와 연동하기에 대해서 여쭈고 싶습니다 :)
1
1377
1
DatabaseSessionHandler.php 에러 해결 부분
0
298
1
안녕하세요. 라우터 서버 연결 질문이 있습니다.
1
281
1
아니 강사님 왜 자꾸 어어 거려요? 진짜 겁나 거슬려 죽겠네 ㅡㅡ 어좀 적당히해요 거슬려 죽겠네 그리고 마이크 좀 좋은거 쓰세요 볼륨이 낮아졌다 커졌ㄷ ㅏ하고 발음도 다뭉개져지고 딕션도 안 좋아서 하나도 안들려요 진짜 개짜증나네
1
572
2
로컬환경에서 개발 후 운영환경으로 배포 시 발생하는 이슈에 대한 문의입니다.
1
575
2
DatabaseSessionHandler 클래스의 gc($maxlifetime) 메소드에 대해 질문드립니다.
2
258
1
Xdebug 설치 후 php index.php 실행하면 오류가 납니다..!
0
1133
1
CentOS 7.* 서버쪽으로 배포를 해보던 중에 질문드립니다.
1
367
1





