0

I try to use $this in a nested function in my class.

I call the method with:

$check_membership = $this->setAuthorisation($posted_username, $ldap_connection);

the method looks like:

private function setAuthorisation($posted_username, $ldap_connection)
{
    // split the posted username for filtering common name
    $temp_var = explode('\\', $posted_username);
    $cn_name = end($temp_var);

    // filter parameter for ldap_search
    $filter = "objectClass=*";

    // search attribute to get only member
    $attr = array("member");

    // possible membership status:
    // group_membership: "null": No access to enter the page.
    // group_membership:    "1": Access to the page, but no admin rights.
    // group_membership:    "2": Access to the page with admin rights.

    /**
     * perform the setMembershipUser for authorisation the "user" group
     */
    function setMembershipUser($ldap_connection, $cn_name, $filter, $attr)
    {
        // search for user in the authorized ad group "user"
        $user_result = ldap_search($ldap_connection, GROUP_USER.",".BASE_DS, $filter, $attr);

        // reads multiple entries from the given result
        $user_entries = ldap_get_entries($ldap_connection, $user_result);

        // check if cn_name is in $user_entries
        if (preg_grep("/CN=".$cn_name."/i", $user_entries[0]["member"]))
        {
            $this->group_membership = 1;
        } 
        else 
        {
            $this->group_membership = null;
        }
    }
    setMembershipUser($ldap_connection, $cn_name, $filter, $attr);
    return $this->group_membership;
}

in the function setMembershipUser I got the Error "Fatal error: Using $this when not in object context in..."

Can I use $this in nested functions? The outer function is in my class.

7
  • 2
    Why would you nest the functions like that? Just create setMembershipUser() as a "normal" function that's private. Commented Sep 23, 2013 at 14:58
  • Haven't seen such nesting in a class for a long time and they are called methods in classes Commented Sep 23, 2013 at 14:59
  • Thought it looks like more structured Commented Sep 23, 2013 at 14:59
  • stackoverflow.com/questions/415969/… Commented Sep 23, 2013 at 15:01
  • @GordonM, Yes there are (some, few) reasons for nested functions, but what is the point of them in this case? Commented Sep 23, 2013 at 15:04

1 Answer 1

1

Your nested function is just that... a function. It's not a method of the parent class, even though it exists only within that method. You could pass in the outer $this as a parameter, e.g.

class foo {
   function bar() {
       function baz($qux) {
          ...
       }
       baz($this);
   }
}

But... You shouldn't be nesting functions like that anyways. Why not just promote your nested function to a full-blown "regular" function, meaning it would be a method of your class, and then $this would be available as expected.

As another note, you could not use $global to make $this visible inside the method, because global only looks at the real global scope, it doesn't look in "parent" scopes at all. e.g.

$x = 42;
class foo {
   function bar() {
       $x = 13;
       function baz() {
            $x = 69;
            echo $x; // outputs 69
            global $x;
            echo $x; // outputs 42
       }
   }
}

There is no way for the baz() function to get at $x = 13, because the only scopes available anywhere in PHP are the "local" scope, which is the 69 is defined, and the global scope, where $x is 42.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.