Access array returned by a function in php

前端 未结 5 512
抹茶落季
抹茶落季 2020-11-22 12:43

I\'m using a template engine that inserts code in my site where I want it.

I wrote a function to test for something which is quite easy:

myfunction()         


        
相关标签:
5条回答
  • 2020-11-22 12:47

    It is possible from PHP version 5.4.

    If you don't want a temporary variable for that and your PHP version is less, than 5.4, than you still can use a few built in functions to get the first or the last element:

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

    Edit: !!! Please note, that in later versions( 5.4+ ) PHP will throw a notice, because end only expects variables as parameter.

    0 讨论(0)
  • 2020-11-22 12:56

    $this->data is always accessible, if it is protected. $object->data is not accessible from everywhere, so if you're returning $this in your code, and it is evaluated as such, it should be ok.

    Btw, there is a bug in your code: The quotes need to be escaped.

    myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; }
    
    0 讨论(0)
  • 2020-11-22 13:00

    You cannot use something like this :

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

    ie, array-access syntax is not possible directly on a function-call.

    Youy have to use some temporary variable, like this :

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

    In your case, this probably means using something like this :

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

    You have to :

    • first, call your getData() method, and store its return value in a temporary varibale
    • then, use that temporary variable for your test

    You don't have much choice about that, actually...

    0 讨论(0)
  • 2020-11-22 13:06

    Ok... apparently there really isn't a better way, so I'm going to answer myself with a not so beautiful solution:

    I created the function:

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

    And used it like this:

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

    This is not pretty but works.

    0 讨论(0)
  • 2020-11-22 13:08

    Since PHP 5.4 it's possible to do exactly that:

    getSomeArray()[2]
    

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

    On PHP 5.3 or earlier, you'll need to use a temporary variable.

    0 讨论(0)
提交回复
热议问题