2015-01-12 8 views
5

나는이 내 프로젝트 주위에 많은 장소 (장소 수천)에 다음 코드 : PHP : 값을 돌려줍니다는 isset 함수를 작성

$foo = isset($mixed) ? $mixed : null; 

$mixed 아무것도 할 수있다

: 배열, 배열 요소, 개체, 예 :

$foo = isset($array['element']) ? $array['element'] : null; 
$foo = isset($nestedArray['element']['key']) ? $nestedArray['element']['key'] : null; 
$foo = isset($object->prop) ? $object->prop : null; 
$foo = isset($object->chain->of->props) ? $object->chain->of->props : null; 

이 반복 된 논리를 (단순한) 함수로 작성하는 방법이 있습니까? 예를 들어 다음과 같이 시도했습니다.

function myIsset($mixed) 
{ 
    return isset($mixed) ? $mixed : null; 
} 

위의 기능은 작동하지만 실제로는 그렇지 않습니다. 예를 들어, $object->prop이없고 myIsset($object->prop))을 호출하면 함수가 호출되기 전에 치명적인 오류 : Undefined property: Object::$prop가 발생합니다.

그런 기능을 어떻게 쓸 것인지에 대한 아이디어가 있습니까? 심지어 가능할까요?

일부 솔루션은 herehere으로 게시되었지만 이러한 솔루션은 배열 용으로 만 제공됩니다.

+3

더 효율적으로 할 수 있다고 생각하지 않습니다. 대신 나는 당신이 그것을 사용하는 횟수를 줄이려고 노력할 것이다. * 수천 *은 너무 많이 보인다. 변수의 전체 블록이 설정되었거나 설정되지 않았으므로 하나를 검사하면 여러 가지를 설정할 수 있습니다. – jeroen

+2

@jeroen 어디서나 이것을 자주 확인해야하는 경우 "코드 냄새"입니다. –

답변

7

php references을 읽는 동안 내 자신의 질문에 대한 답을 찾았습니다. 다음과 같이 내 솔루션입니다 :이 함수

function issetValueNull(&$mixed) 
{ 
    return (isset($mixed)) ? $mixed : null; 
} 

통화 지금과 같이 :

$foo = issetValueNull($array['element']); 
$foo = issetValueNull($nestedArray['element']['key']); 
$foo = issetValueNull($object->prop); 
$foo = issetValueNull($object->chain->of->props); 

희망이 비슷한 솔루션을 찾고 거기에 누군가가 도움이됩니다.

+0

이것은 놀라운 발견입니다! 게시 해 주셔서 감사합니다. –

0

당신은 실제로 그냥 좋아 작성할 수

$foo = $mixed?:null; 
+1

아니요, '$ mixed'가 설정되어 있지 않으면 경고를 생성합니다. – jeroen

+0

알림이 생성됩니다. 그리고 프로덕션 환경에서주의 사항이나 경고를 표시하는 업무가 없습니다. –

+0

그런 식의 코드를 작성하는 경우, 설정되지 않은 변수가 'NULL'로 평가 될 때 전체 삼항 식을 건너 뛸 수 있습니다. – jeroen

-2

가이

function myIsset($mixed) 
{ 
    return isset($mixed); // this is a boolean so it will return true or false 
} 
+1

전역 함수의 결과를 반환하는 함수를 작성하는 이유는 무엇입니까? 의미론? – Leo

+1

나는 그것이 중복다는 것을 동의한다. – Rafael

2

isset을 할 수있는 경우 그냥 확인하고 싶은 경우는 언어 구조가 아닌 일반 기능입니다. 따라서 오류가 발생할 수있는 부분을 취할 수 있으며 false를 반환합니다.

myIsset($object->prop))을 호출하면 평가가 수행되고 오류가 발생합니다.

이 자바 스크립트에 typeof nonExistentVariable를 사용하는 것과 같은 문제가 http://php.net/manual/en/function.isset.php

를 참조하십시오. typeof은 언어 구조이므로 오류가 발생하지 않습니다.

그러나 함수를 만들려고하면 정의되지 않은 변수를 사용하려고하면 오류가 발생합니다.

function isDef(val) { 
    return typeof val !== 'undefined'; 
} 

console.log(typeof nonExistent !== 'undefined'); // This is OK, returns false 
isDef(nonExistent); // Error nonExistent is not defined 
-1
function f(&$v) 
{ 
    $r = null; 

    if (isset($v)) { 
     $r = $v; 
    } 

    return $r; 
}