그냥 배열로 하시면 될 것 같습니다.
class Foo { protected $bar; protected $baz; public function __construct($params) { $this->bar = $params['bar']; $this->baz = $params['baz']; } } $foo = new Foo(['bar' => 'barText', 'baz' => 'bazText']);
다른 방법으로는 func_get_args()나 PHP 5.6에서 추가된 가변 길이 인수 목록이라는 걸 쓸 수도 있을 것 같습니다.
http://php.net/manual/kr/functions.arguments.php#functions.variable-arg-list
하지만 저라면 다소 귀찮더라도 파라미터가 추가될 때마다 클래스를 고칠 것 같아요. 혹은 계속 파라미터가 추가된다는 건 클래스가 너무 많은 일을 하는 것이라는 신호가 될 수도 있으니 리팩토링이 필요한지 검토해 볼 것 같기도 합니다. 어찌되었든 코드를 수정하는 방향으로 갈 것 같네요. ㅎㅎ 상황에 따라 다른거지 정답은 없는거니까 이 의견은 그냥 참고만 해주세요.
저같이 초보자에게는 저런 코드와 방법이 많지만 다른사람들은 이런 이유로 이런식으로 쓴다는 책에서는 찾기 힘든 조언들이 학습하는데 큰 도움이 됩니다!
연관배열형태로(js의 객체, java의 map형태)로 전달하면 되는군요.
친절한 답변 감사합니다^^
추가로 그냥 배열로하면 된다고 하셨는데 js나 java에서는
이렇게 구분을 하는데 php에서는
배열이라고 하면 위에 언급된 1.배열, 리스트를 말하는거고
연관배열이라고 하면 위에 언급된 2.객체, 맵 형태를 말하는 건가요?
커뮤니케이션하거나 질문할때 용어가 애매해서 잘 못 이해하게 되는 케이스들이 있어 명확히 하고싶은데 알려주시면 감사하겠습니다!
PHP에서는 리스트와 맵을 구분하지 않고, 그냥 퉁 쳐서 배열이라고 합니다. 일반적으로 '연관'이라고 확실히 구분해서 말하지 않습니다. 해서 문맥에 따라 이해하셔야 합니다.
페북 그룹에 getInstance() 메서드를 만들고, getInstance() 메서드가 다시 private 선언된 생성자 예를 올린 적이 있는데, 페북 검색이 똥이라 찾을 수가 없네요. PHP는 메서드 오버로딩을 지원하지 않기 때문에, 이미 알고 계신대로 배열, splat 연산자 등을 이용해야 합니다.
PHP에서 메서드 오버로딩을 하는 편법은 아래 링크를 참고해 보시고, 'php methods parameter normalization'이란 키워드도 추가로 찾아보시면 좋겠네요.
https://murze.be/2016/10/method-overloading-possible-php-sort/
php를 학습중에 문의사항이 생겼습니다.
php에서 클래스 인스턴스 생성시 생성자 파라미터로 초기화할 값들 넘겨주는데
파라미터가 추가될 때 마다 클래스를 수정하고싶지 않습니다.
php는 잘 몰라서 아래 자바스크립트의 예시 코드를 추가하였습니다.
아마 연관배열 형태로 넘기고 꺼내쓰도록 하면될 것 같은데 맞는방법인지 보통 어떻게 처리하는지 문의드립니다.
javascript 케이스
위에서 후자의 경우 초기화에서 객체그대로 클래스 멤버의 참조로 등록하며 기능추가나 값참조가 필요하 로직에만 신경쓰면 되는데 전자의경우 생성자에서도 일일이 추가해줘야 합니다.
아마 php에서 연관배열이 있으니 js로 유사하게 처리한다면 아래처럼 될 것 같은데 맞나요?
어떤 방법이 맞는건지 좋은건지 조언 부탁드립니다.