Programing

PHP의 함수에서 반환 된 배열에 액세스

lottogame 2020. 9. 9. 20:09
반응형

PHP의 함수에서 반환 된 배열에 액세스


원하는 위치에 사이트에 코드를 삽입하는 템플릿 엔진을 사용하고 있습니다.

아주 쉬운 것을 테스트하는 함수를 작성했습니다.

myfunction() { return '($this->data["a"]["b"] ? true : false)'; }

문제는 $ this-> data가 비공개이고 어디에서나 액세스 할 수 없으므로 getData (); 내 문제가 발생합니다.

$this->getData()['a']['b']

작동하지 않으며 값을 먼저 할당해도 if () 블록에서 직접 사용되기 때문에 그렇지 않습니다.

어떤 아이디어?


PHP 5.4부터 정확히 다음과 같이 할 수 있습니다.

getSomeArray()[2]

참조 : https://secure.php.net/manual/en/language.types.array.php#example-62

PHP 5.3 이전 버전에서는 임시 변수를 사용해야합니다.


다음과 같은 것을 사용할 수 없습니다.

$this->getData()['a']['b']

즉, 배열 액세스 구문은 함수 호출에서 직접 가능하지 않습니다.

다음 과 같은 임시 변수 를 사용해야 합니다.

$tmp = $this->getData();
$tmp['a']['b']    // use $tmp, now

귀하의 경우 이것은 아마도 다음과 같은 것을 사용하는 것을 의미합니다.

function myfunction() {
  $tmp = $this->getData();
  return ($tmp['a']['b'] ? true : false);
}

다음을 수행해야합니다.

  • 먼저 getData()메서드를 호출 하고 반환 값을 임시 변수에 저장합니다.
  • 그런 다음 테스트에 해당 임시 변수를 사용하십시오.

선택의 여지가 많지 않습니다. 사실 ...


좋아 ... 분명히 더 좋은 방법이 없기 때문에 그렇게 아름답 지 않은 해결책으로 스스로 대답 할 것입니다.

함수를 만들었습니다.

arrayGet($array, $index) { return $array[$index]; }

그리고 다음과 같이 사용했습니다.

myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' }

이것은 예쁘지는 않지만 작동합니다.


$this->data입니다 항상 이 보호되는 경우, 접근. 어디에서나 액세스 할 수 없으므로 코드에서 반환 하고 그 자체로 평가되면 괜찮을 것입니다.$object->data$this

Btw, 코드에 버그가 있습니다. 따옴표를 이스케이프해야합니다.

myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; }

PHP 버전 5.4부터 가능합니다.

임시 변수원하지 않고 PHP 버전이 5.4 미만인 경우 에도 몇 가지 내장 함수를 사용하여 첫 번째 또는 마지막 요소를 가져올 수 있습니다.

$x     = 'first?last';
$first = array_shift(explode('?', $x));
$last  = end(explode('?', $x));
$last2 = array_pop(explode('?', $x));

편집 : !!! 이후 버전 (5.4+)에서는 end가 매개 변수로만 변수를 예상하기 때문에 PHP가 알림을 표시합니다.

참고 URL : https://stackoverflow.com/questions/1459377/access-array-returned-by-a-function-in-php

반응형