이 예제 코드는 작동합니다. $ x는 기본적으로 키와 값이있는 객체이거나 키와 객체가 값인 배열입니다. $ y는 두 가지 방법으로 생성됩니다. 기능은 다른 곳에서는 사용하지 않을 경우이, 좋은 연습프로그래밍에서 '해킹'사용 하시겠습니까?
private function someFunction($x) {
if (is_object($x)) {
$y = 'result of something';
} elseif (is_array($x)) {
$y = 'result of something';
} else {
$y = null;
}
return $y;
}
인가? '비 해킹'방법은 아마도 배열을 본질적으로 배열이기 때문에 배열로 개체를 변환 한 다음 배열 수를 기반으로 논리를 만드는 것입니다.
아니면 그냥 '올바른 방법으로'코드를 작성하는 것에 대해 많이 생각하고 있습니까?
사실 꽤 나쁜 습관입니다. 왜 항상이 함수에서 처리중인 데이터 구조를 같은 방식으로 구성하지 않는가? 이와 같은 코드를 가지고 있다면 일반적으로 디자인에 문제가 있음을 나타냅니다. – GordonM
나는 이것에 쪼개졌다. 이상적으로, @GordonM이 말했듯이, 항상 같은 방식으로 데이터를 생성해야합니다. 초기화되지 않은 입력을 적절히 처리하기 위해'is_object '를 여전히 확인할 수 있습니다. 그러나 입력을 제어하지 않으면, 그렇지 않습니다. 이것이 왜 나쁜 생각인지를보십시오. –
필자는이 기능을 사용하여 일반적으로 잘 될 것이라고 생각합니다. 특히 라이브러리/유틸리티 기능 일 경우에는 "무엇을 할 수 있습니까?"라는 말은 두 가지 유형의 입력 모두에 대해 현명하게 원하는 것일 수 있습니다. 본질적으로 is_XXX() 체크는 다른 언어가 호출 할 오버로드 된 함수의 버전을 결정하는 데 사용하는 것과 동일한 체크입니다. 'int myfunc (int param)'대'int myfunc (string param)' – TripeHound