복붙노트

PHP에서 함수가 반환 한 액세스 배열

PHP

PHP에서 함수가 반환 한 액세스 배열

나는 그것을 원한 나의 위치에 부호를 삽입하는 템플렛 엔진을 사용하고있다.

나는 아주 쉬운 것을 테스트하기위한 함수를 작성했다.

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

문제는 $ this-> 데이터가 비공개이며 어디에서나 액세스 할 수 없으므로 getData ()를 사용해야합니다. 내 문제를 일으킨다.

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

작동하지 않으며 값을 먼저 할당하는 것은 if () 블록에서 직접 사용되기 때문이 아닙니다.

어떤 아이디어?

해결법

  1. ==============================

    1.PHP 5.4부터 정확히 할 수 있습니다 :

    PHP 5.4부터 정확히 할 수 있습니다 :

    getSomeArray()[2]
    

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

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

  2. ==============================

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

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

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

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

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

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

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

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

    당신은해야한다 :

    너는 그것에 대해 많은 선택권이 없다. 사실 ...

  3. ==============================

    3.Ok ... 명백하게 정말로 더 좋은 길은 없다. 그래서 나는 그렇게 아름다운 해결책으로 나 자신에게 대답 할 것이다 :

    Ok ... 명백하게 정말로 더 좋은 길은 없다. 그래서 나는 그렇게 아름다운 해결책으로 나 자신에게 대답 할 것이다 :

    함수를 만들었습니다.

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

    그리고 이것을 다음과 같이 사용했습니다 :

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

    이것은 꽤 아니지만 작동합니다.

  4. ==============================

    4.$ this-> 데이터는 보호되어있는 경우 항상 액세스 할 수 있습니다. $ object-> data는 모든 곳에서 액세스 할 수 없으므로 $ this를 코드에 반환하면 평가되어야합니다.

    $ this-> 데이터는 보호되어있는 경우 항상 액세스 할 수 있습니다. $ object-> data는 모든 곳에서 액세스 할 수 없으므로 $ this를 코드에 반환하면 평가되어야합니다.

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

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

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

    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 이상)에서는 PHP가 변수를 변수로 기대하기 때문에주의해야합니다.

  6. from https://stackoverflow.com/questions/1459377/access-array-returned-by-a-function-in-php by cc-by-sa and MIT license