PHP에서는 동일한 메소드에서 다른 유형을 반환하는 것이 좋지 않은 것으로 간주됩니다. 어쩌면 거기에 가장 좋은 패턴이 있지만 근본적으로 뭔가를 할 내 방법을 원한다면 실패하고 문자열 오류 메시지를 반환하지만 작동한다면 true를 반환합니다. 이 doesnt는 나에게 아주 바르게 보인다. 그러나 내가이 일을 만들기 위해 볼 수있는 유일한 다른 방법은 오류 메시지를위한 문자열과 '괜찮은'경우 '유효'또는 무언가와 같은 문자열을 반환하는 것이 될 것이다. 다시 말하지만,이 방법을 사용하면 더 많은 결합 방법이 있다는 것을 의미합니다.이 방법을 사용하면 false를 true로 확인하지만 메서드에서 유효한 응답을 나타내는 단어를 알아야합니다.PHP - 동일한 메소드에서 다른 유형의 값을 반환하는 경우
답변
음, 배열을 반환 할 수 있습니다. 첫 번째 인덱스에는 부울 true/false가 포함되고 두 번째 인덱스에는 필요한 경우 추가 정보가 포함됩니다.
함수가 작동하는지 여부를 모니터링하려는 경우 예외를 사용하는 것이 가장 좋습니다. 프로그램 언어를 제공하는 모든 프로그래밍 언어에서와 마찬가지로, 이는 예상 된 프로그램 흐름 범위 밖의 "예외적 인"사례를 나타내며 문제가 발생했음을 나타 내기 위해 어떠한 유형의 반환도 필요하지 않습니다. PHP 사양은 아래 링크 된 관련 설명서를 참조하십시오.
5는 PHP 예외 개념을 도입 한 첫 번째 버전이므로 PHP5를 사용한다고 가정합니다. 이를 보충하는 PHP4의 해결 방법은 trigger_error 함수를 사용했습니다. http://www.php.net/manual/en/function.trigger-error.php – apiri
네,하지만 별도의 코드로 코드를 분할하고 싶습니다. 그래서 예를 들어 내가 말하는 방법은 문자열의 유효성을 검사하는 데 사용될 것입니다. 문자열에 오류가있는 경우 오류가 무엇인지 반환하고 싶지만 ok 일 경우 true를 반환합니다. – David
그런 다음 PHP 기반 Exception을 서브 클래 싱하여 고유 한 StringValidationException 클래스를 가질 수 있습니다. 그런 다음 메서드는 String을 사용하여 유효성 검사를 수행하고 유효한 경우 true를 반환하고 필드가없는 경우 예외를 throw합니다. 원래의 의도에 더 가까운 또 다른 옵션은 오류를 설명하는 문자열을 반환하는 isInvalid 메서드 또는 false로 평가되는 빈 문자열 ""을 갖는 것입니다. 예제 사용은 isInvalid ($ myString)이며 지정된 메시지에서 유효하지 않은 경우 true를 반환하고 PHP에서 정의한 false와 같으면 "false"를 반환합니다. – apiri
당신이 클래스의 방법 언급하는 것을 가정하면, 단순히 방법에서 TRUE 또는 FALSE를 반환하지만 배열을 포함 할 수있는 클래스에 $의 _error 속성을 사용하는 것이 좋을 것이다 오류 메시지.
그런 다음 결과가 false이면 메서드를 반환하기 전에 $ _error 속성에 오류 메시지를 설정할 수 있으며 get_error() 메서드를 사용하여 메시지를 검색 할 수 있습니다.
+1 이것은 PHP와 함께 제공되는 대부분의 OOP 라이브러리와 프레임 워크가 IMO를 수행하는 최선의 방법입니다. 또는, 일부 라이브러리는 마지막 작업에서 발생한 에러를 반환하는'mysql_error()'또는'curl_error()'와 같은 함수를 가지고있다. 그러나 객체로 작업하고 예외를 사용하고 싶지 않거나 사용할 수 없다면'error' 속성을 사용하십시오. –
예, 나는 oop을 언급하고있었습니다. 액 톨 오류 개체를 제안 해주십시오. 나는 비교적 프로그래밍에 익숙하지 않지만이 유형의 문제에 사용되는 일종의 표준 디자인 패턴이 있다고 확신했다. – David
내 일반적인 충고는 KISS 원리라고하는 "단순하게 유지"하는 것이다. 여러 오류를 추적하려면 배열을 사용하십시오. 오류가 하나 인 경우 문자열로 저장하십시오. 오류 메시지의 추가 속성이나 동작을 확인한 다음 실제 개체 사용에 대한 걱정을 시작하십시오. 고유 한 필요성을 확인하면 개체를 사용하는 것이 좋습니다. 그렇지 않으면 네이티브 형식과 해당 기능을 사용하십시오. –
PHP로 도망 갈 수는 있지만 문제가 발생할 수 있습니다. 당신이나 다른 누군가가 앞으로 앱을 유지해야 할 때 Esp. 일반적으로 변수의 whats에 대한 모호함을 만드는 이와 같은 접근을 피하는 것이 좋습니다.
당신이하고있는 일을 달성하는 한 가지 방법은 결과 코드 또는 메시지를 반환하고 참조 된 매개 변수를 사용하여 반환 된 실제 값을 가져 오는 것입니다.
예 :
$msg = MyFunc($o);
if ($msg == 'OK') //or ($msg == 0)
{
//use the returned object or value
$o->Foo();
}
else
{
//respond to error
}
사실 반환 또는 다른 어떤 좋은 해결책이 될 수 있습니다. 때때로. 반환 된 값을 변경하기로 결정하면 중단 될 수 있습니다. 개인적으로, 나는 그것을 좋아한다.
배열을 반환 할 수 있습니다. 비어있는 경우 오류가 없습니다. 모든 오류는 배열의 개별 항목입니다.
게다가, exception을 던집니다.
PHP는 느슨한 언어이므로 PHP와는 다른 유형의 함수를 반환하는 것이 일반적입니다.
예를 들어 mysql_query()
은 성공시 리소스를 반환하고 오류시 부울 false
을 반환합니다. 오류 상태를 테스트 한 다음 mysql_error()
과 같은 다른 함수를 호출하여 오류의 특성에 대한 특정 정보를 얻습니다.OO 코드를 작성할 때
$query = mysql_query($sql);
if ($query === false) {
die(mysql_error());
}
그러나, 나는 함수에서 다른
관련이없는 개체 유형을 반환에 대한주의 것입니다. 그것은 지루한 타입 검사 코드를 많이 작성하는 개발자가 필요합니다
$result = $search->find($keyword);
if ($result === null) {
// no entry matches $id
} elseif ($result instanceof ResultClass) {
// one row found; do something with the result
print $result;
} elseif ($result instanceof ResultCollection) {
foreach ($result as $element) {
print $element;
}
} else {
// are there other types for $result?
}
어떤 고통을 때마다 당신이 find()
를 호출 모든 코드를 를 작성!
find()
메서드가 항상 ResultCollection을 반환하면 위의 예가 더 좋습니다. 결과가 없으면 콜렉션에 항목이 없을 것입니다. 함수가 일관되게 주어진 형식을 반환한다고 가정하면 코드가 더 간단합니다.
$result = $search->find($keyword);
foreach ($result as $element) {
print $element;
}
- 1. 동일한 유형의 여러 객체의 메소드에서 setTimeout
- 2. 메소드에서 동일한 유형의 다른 객체로 자체 객체를 바꾸는 것이 안전합니까?
- 3. 파이썬 : 다른 날짜에 동일한 값을 반환하는 time.mktime
- 4. 다른 유형의 동일한 동작 구현
- 5. 여러 값을 반환하는 PHP 스타일
- 6. 다른 시간에 동일한 값을 반환하는 Getdate()! 무슨 일 이니?
- 7. PHP - 잘못된 값을 반환하는 날짜
- 8. 동일한 열 값을 가진 행을 반환하는 Tsql
- 9. 모든 인덱스에 대해 동일한 값을 반환하는 배열
- 10. Flex Air에서 새 CheckBox 값을 반환하는 경우
- 11. 자바 스크립트를 사용하여 PHP 요소를 반환하는 경우
- 12. 동일한 유형의 문서가있는 다른 RavenDB 모음
- 13. 오라클 : 다른 유형의 경우 * 탭에서 선택 하시겠습니까?
- 14. 다른 값을 반환하는 상속 된 클래스
- 15. Perl에서 다른 유형의 해시 값을 테스트하고 있습니까?
- 16. 키에서 PHP 배열 값을 반환하는 방법?
- 17. VB.net에서 다른 값을 반환하는 설정 변수!
- 18. Firefox 부가 기능 - 하나의 메소드에서 작동하지만 동일한 객체의 다른 메소드에서 실패 함
- 19. 클래스의 모든 메소드에서 PHP 클래스 객체를 가져와야합니까?
- 20. 동일한 유형의 컨트롤 찾기
- 21. 동일한 유형의 함수가 반환되었습니다.
- 22. 변경 동일한 유형의
- 23. 여러 dbms 쿼리 응답을 동일한 유형의 변수 (PHP)로 변환
- 24. NSTemporaryDirectory가 nil을 반환하는 경우
- 25. enum 값을 반환하는 제네릭 함수
- 26. [Linq-To-Sql] 다른 데이터 유형의 두 값을 반환하는 방법은 무엇입니까? 여기
- 27. PHP 클래스의 여러 메소드에서 변수를 공유/전달해야합니까?
- 28. 경우 현재 PHP 배열에서 값을 제거
- 29. 이상한 값을 반환하는 MOD
- 30. 웹 페이지에 값을 반환하는 방법
나는 그것에 대해서도 알았지 만 호출하는 메서드는 어떤 식으로 인덱스를 찾을 필요가 있으므로 더 많이 결합됩니다. – David