是否可以从方法中删除传递给方法的值

时间:2016-11-10 19:57:09

标签: php

假设我有一个方法(在这种特殊情况下是静态方法),并且此方法适用于给定值。一旦完成,我可以在代码中自动删除变量(而不是函数副本)。

我怀疑所有人都知道这是不可能的,但是没有明确的声明我的搜索已找到。

示例案例:

静态方法:

public static function checkKey($keyValue = null)
{
    if(!is_null($keyValue) && !empty($keyValue)) {
        if($_SESSION['keyValue'] == $keyValue) {
            unset($keyValue,$_SESSION['keyValue']);
            return true;
        }
        unset($keyValue,$_SESSION['keyValue']);
        return false;
    }
    return false;
}

用法:

$valueToBeChecked = "I want this value unset from within the function"
//PHP page code 
AbstractClass::checkKey($valueToBeChecked);

上面的方法checkKey是否可以从方法$valueToBeChecked 中删除checkKey 的值?

它是一个静态方法的事实不应该太关键,它的形状更多是有一种方法,当函数作为参数传递时,函数可以删除在函数/方法之外设置的值吗?

我意识到如果将整个事物包装在一个类中并且变量保存为类级别变量(unset($this->var)),这是可能的,但我很好奇是否有任何能力“到达”变量来自超出范围,如

public static function checkKey($keyValue = null)
{
    unset(\$keyValue);
}

我对命名空间的经验有限,但这是我最好的猜测,如果这是可能的,如何去做。

简化的平等结果:

我想要达到的是这个动作,完全在方法中:

$valueToBeChecked = "something"
AbstractClass::checkKey($valueToBeChecked);
unset($valueToBeChecked);

1 个答案:

答案 0 :(得分:2)

您无法在函数中取消设置变量并传播该效果。根据{{​​3}}:

  

如果在函数内部取消设置了一个被PASSED BY REFERENCE的变量,则只销毁局部变量。调用环境中的变量将保留与调用unset()之前相同的值。

但是,您可以通过传递引用和设置为null来获得等效行为:

function kill(&$value) {
    $value = null;
}

var_dump($x); // NULL
$x = 'foo';
var_dump($x); // 'foo'
kill($x);
var_dump($x); // NULL

这是有效的,因为在PHP中,没有区分不存在的符号和存在NULL值的符号。