static 형식의 함수를 $this-> 형태로 호출해도 되나요?
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
모듈을 개발하다가 Member Model에 있는 getMemberInfoByMemberSrl 함수를 사용하게 되었습니다
기존에 짜여진 코드를 보던중 해당 함수가 public static 으로 선언되어있는것을 보고 해당 model에서 사용방법을 보니 아래와 같이 사용하더라고요
self::getMemberInfoByMemberSrl
nCenterlite 모듈도 보니 아래와 같이 사용하고요
MemberModel::getMemberInfoByMemberSrl
그런데 타운에서 검색한 해당 함수를 사용하는 모습을 보면 아래와 같이 사용하더라고요
$oMemberModel = getModel('member');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
static 함수가 아닌 일반 class에 종속되는 함수처럼 $oMemberModel-> 로 사용하는데 아무거로나 사용해도 괜찮은건가요?

리버스
Lv. 7
모듈만드는 대학생입니다.
https://potatosoft.kr
https://potatosoft.kr
댓글 5
굳이 인스턴스 속성을 참조할 필요 없는 메소드들은
호출하는 쪽의 편의를 위해 라이믹스 2.0에서 static으로 대거 전환되었습니다.
getModel(...)로 불러서 쓰는 코드는 대부분 그 전에 만들어진 것입니다.
(더 오래된 코드라면 getModel 앞에 &까지 붙이는 흠좀무한 모습을 볼 수 있습니다.)
PHP에서는 static이 아닌 것을 ::으로 호출하면 에러가 나지만
static으로 선언된 것을 ->로 호출하는 것은 상관없습니다. 따라서 기존 방식의 코드도 잘 작동합니다.
길고, 지저분하고, 불필요한 인스턴스를 불필요한 변수에 할당하는 낭비가 발생할 뿐이지요.
감사합니다 :)
자체적으로 getModel(...) 을 사용한다면 ...에서 호출한 모듈의 model 파일을 __consturct 까지 호출하여 맴버변수들과 해당 클래스에 연관된 모든 맴버변수를 활용할 수 있게 됩니다. (라이믹스 2.0부터는 ModulenameModel::getInstance(); 로 호출할 수도 있습니다.) 이렇게 호출하게되면 전체적으로 초기화라는 부분까지 들어가므로 모듈핸들러 파일들의 맴버변수들까지 모두 해당 모듈에서 참조가능한 형태가 됩니다. (이는 클래스의 하위속성이나 상위속성을 활용하는 OOP프로그래밍을 좀 더 연구하세용)
static을 사용한다면 위의 맴버변수나 이런것들 사용안하고 그냥 해당 함수만 콕 찝어서 사용한다고 생각하시면 되요.
해당 함수에서 만약 $this로 호출하는 맴버변수를 사용하거나 값이 없는 static함수를 사용한다면 에러가 나올 수 있습니다.
그런데 값이 없는 static함수란 어떤것을 말씀하시는건가요?
존재하지 않는 static 함수를 호출한다는 말씀이신가요?
static 변수입니다.
맴버변수중에서 값이 지정되지 않은 변수를 가지고 뭔가를 static함수에서 조작하였을때 문제가 될 수 있습니다.