我尝试在我班级的嵌套函数中使用$ this。
我用以下方法调用方法:
$check_membership = $this->setAuthorisation($posted_username, $ldap_connection);
方法如下:
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;
}
函数setMembershipUser中的我得到错误“致命错误:在不在对象上下文中时使用$ this”...
我可以在嵌套函数中使用$ this吗?外部功能在我的班级。
答案 0 :(得分:1)
你的嵌套函数就是......一个函数。它不是父类的方法,即使它只存在于该方法中。您可以将外部$this
作为参数传递,例如
class foo {
function bar() {
function baz($qux) {
...
}
baz($this);
}
}
但是......你不应该像这样嵌套这样的函数。为什么不将你的嵌套函数提升为一个完整的“常规”函数,这意味着它将是你班级的一种方法,然后$this
将按预期提供。
另外请注意,您无法使用$global
使$this
在方法中可见,因为global
只查看真实的全局范围,它不会查看“父级” “范围根本。 e.g。
$x = 42;
class foo {
function bar() {
$x = 13;
function baz() {
$x = 69;
echo $x; // outputs 69
global $x;
echo $x; // outputs 42
}
}
}
baz()函数无法获得$ x = 13,因为PHP中任何地方唯一可用的范围是“本地”范围,即69
已定义,以及全局范围范围,其中$ x是42
。