CakePHP에는 find이라는 매우 기본적인 메서드가 있습니다. 대부분이 메서드는 배열을 반환하지만, count
을 첫 번째 매개 변수로 전달하면 메서드는 정수가 아닌 다른 데이터 형식을 반환합니다.다양한 데이터 형식을 반환하는 함수
이 메서드는 다양한 데이터 형식을 반환 할 수 있습니다.
나쁘지 않습니까?
CakePHP에는 find이라는 매우 기본적인 메서드가 있습니다. 대부분이 메서드는 배열을 반환하지만, count
을 첫 번째 매개 변수로 전달하면 메서드는 정수가 아닌 다른 데이터 형식을 반환합니다.다양한 데이터 형식을 반환하는 함수
이 메서드는 다양한 데이터 형식을 반환 할 수 있습니다.
나쁘지 않습니까?
스크립팅 언어는 입력 매개 변수 유형 또는 매개 변수 값에 따라 여러 유형을 반환하는이 패턴을 사용하는 경향이 있습니다.
혼란 스러울 수 있지만 좋은 문서가 있으면 문제가되지 않으며 매우 강력 할 수 있습니다.
강력한 형식의 언어는 함수 오버로드를 사용하여 동일한 작업을 수행합니다.
아니요. 유연한 방식입니다. PHP에서는 표준 함수도 다른 유형을 반환합니다. 예 : strpos()
. integer
위치와 boolean
false를 반환 할 수 있습니다.
이것은 의도적으로 설계된 동작입니다. PHP는 동적 유형의 언어이므로 다양한 데이터 유형을 반환하는 함수 (Java와 달리 함수가 반환하는 내용을 확인할 수 있음)에 대해 자신을 보호 할 수는 없습니다. 매우 유연합니다 (또한 좋지 않을 수도 있습니다). 그래서 단위 테스트를 작성하여 예상치 못한 결과를 방지하는 것이 좋습니다. You can see phpunit for a Unit Testing framework.
동작이 문서화되어있는 한 은 나쁜 것이 아닙니다..
이// returns a "const char*" if c == 0
// returns a "string*" if c == 1
const void* foo(int c) {
const void* a;
if (c == 0) {
a = (const void*)"foo";
} else if (c == 1) {
string* b = new string("bar");
a = (const void*)b;
}
return a;
}
그런 다음이 작업을 수행 할 수 있습니다 :
const char* x = (const char*)foo(0); // get a const char*
string* y = (string*)foo(1); // get a string*
std::cout << x << *y; // prints "foobar"
을 그러나 강력한 형식의 언어입니다 예를 당 C/C++에서는, 당신은 무효 포인터를 사용하여 유사한 결과 (void*
)을 달성 할 수 제대로 문서화하지 않으면 예기치 않은 동작이 발생할 수 있습니다. 포인터가 있다면 때문에 예상치 못한 유형으로 캐스팅 한 후 사용되는 :
string* y = (string*)foo(0); // get a const char*, bad type cast
std::cout << *y; // Segmentation fault
는 위의 잘 컴파일하지만 런타임에 실패합니다. 물론, PHP에서 비슷한 일을하는 것이 segfault는 아니지만 대부분 프로그램의 나머지 부분을 망칠 것입니다.
Alexander, strpos는 아마 정수 나 false를 반환하기 때문에 좋은 예가 아닐 것입니다. false == 0은 참이지만 false === 0은 false입니다. 이것은 문자열의 첫 글자와 일치 할 수 있습니다. 문제. 그러나 여러 유형을 반환하는 스크립팅 언어의 일반적인 규칙은 동작이 허용됩니다. –
내장 함수가 올바르게 수행하지 못하기 때문입니다. PHP 내장 함수는 내가 멍청하다고 생각하는 많은 일을합니다. – sberry
@Toby, -1을 반환하는 방법에 대해? – sberry