질문/조언질답게시판
Extra Form
PHP PHP 7.4
CMS Rhymix 2.x

모듈을 개발하다가 Member Model에 있는 getMemberInfoByMemberSrl 함수를 사용하게 되었습니다

 

기존에 짜여진 코드를 보던중 해당 함수가 public static 으로 선언되어있는것을 보고 해당 model에서 사용방법을 보니 아래와 같이 사용하더라고요

 

self::getMemberInfoByMemberSrl

 

nCenterlite 모듈도 보니 아래와 같이 사용하고요

 

MemberModel::getMemberInfoByMemberSrl

 

 

 

그런데 타운에서 검색한 해당 함수를 사용하는 모습을 보면 아래와 같이 사용하더라고요

 

$oMemberModel = getModel('member');

$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);

 

static 함수가 아닌 일반 class에 종속되는 함수처럼 $oMemberModel-> 로 사용하는데 아무거로나 사용해도 괜찮은건가요?

  • profile

    굳이 인스턴스 속성을 참조할 필요 없는 메소드들은

    호출하는 쪽의 편의를 위해 라이믹스 2.0에서 static으로 대거 전환되었습니다.

    getModel(...)로 불러서 쓰는 코드는 대부분 그 전에 만들어진 것입니다.

    (더 오래된 코드라면 getModel 앞에 &까지 붙이는 흠좀무한 모습을 볼 수 있습니다.)

     

    PHP에서는 static이 아닌 것을 ::으로 호출하면 에러가 나지만

    static으로 선언된 것을 ->로 호출하는 것은 상관없습니다. 따라서 기존 방식의 코드도 잘 작동합니다.

    길고, 지저분하고, 불필요한 인스턴스를 불필요한 변수에 할당하는 낭비가 발생할 뿐이지요.

  • profile profile
    그렇다면 라이믹스 2.0 이상에서 동작하는 모듈에 경우 굳이 이전 방식을 사용하지 않고 :: 를 통해 호출해도 된다는 말씀이시군요

    감사합니다 :)
  • profile
    static 이라는 정의를 좀 간단하게 생각해보시면 해당 클래스를 초기화시켜서 해당 클래스내의 함수를 실행하기보단 "그냥 이 함수만 필요한데 이함수만 사용할께" 라는 의미가 강합니다.

    자체적으로 getModel(...) 을 사용한다면 ...에서 호출한 모듈의 model 파일을 __consturct 까지 호출하여 맴버변수들과 해당 클래스에 연관된 모든 맴버변수를 활용할 수 있게 됩니다. (라이믹스 2.0부터는 ModulenameModel::getInstance(); 로 호출할 수도 있습니다.) 이렇게 호출하게되면 전체적으로 초기화라는 부분까지 들어가므로 모듈핸들러 파일들의 맴버변수들까지 모두 해당 모듈에서 참조가능한 형태가 됩니다. (이는 클래스의 하위속성이나 상위속성을 활용하는 OOP프로그래밍을 좀 더 연구하세용)

    static을 사용한다면 위의 맴버변수나 이런것들 사용안하고 그냥 해당 함수만 콕 찝어서 사용한다고 생각하시면 되요.

    해당 함수에서 만약 $this로 호출하는 맴버변수를 사용하거나 값이 없는 static함수를 사용한다면 에러가 나올 수 있습니다.
  • profile profile
    쉽게 이해가 되었습니다. 감사합니다 :)

    그런데 값이 없는 static함수란 어떤것을 말씀하시는건가요?

    존재하지 않는 static 함수를 호출한다는 말씀이신가요?
  • profile profile
    static 함수라고 잘못 말씀드렷네요

    static 변수입니다.

    맴버변수중에서 값이 지정되지 않은 변수를 가지고 뭔가를 static함수에서 조작하였을때 문제가 될 수 있습니다.