假设我有一个方法(在这个特殊情况下是一个静态方法),并且这个方法适用于给定的值。完成后有一种方法可以自动在代码中删除变量(而不是函数副本)。
根据我所读到的所有内容,我怀疑这是不可能的,但是我的搜索没有找到明确的声明。
一个案例:
静态方法:
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
是否可以从方法 checkKey
中删除 $valueToBeChecked
的值 em>?
事实上它是一个静态方法不应该太关键,更重要的是当将变量作为参数传递时,函数是否可以删除在函数/方法之外设置的值?
我意识到如果整个东西都包装在一个类中并且变量被保存为类级别变量(unset($this->var)
),这是可能的,但我很好奇如果有任何能力从范围之外“访问”变量,例如
public static function checkKey($keyValue = null)
{
unset(\$keyValue);
}
我在命名空间方面的经验有限,但这是我对这是否可能以及如何实现的最佳猜测。
简化的等效结果:
我试图达到的是这个 Action ,完全在方法内:
$valueToBeChecked = "something"
AbstractClass::checkKey($valueToBeChecked);
unset($valueToBeChecked);
最佳答案
您不能从函数中取消设置变量并传播该效果。根据 manual :
If a variable that is PASSED BY REFERENCE is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.
但是,您可以通过引用传递和设置为 null 获得等效的行为:
function kill(&$value) {
$value = null;
}
var_dump($x); // NULL
$x = 'foo';
var_dump($x); // 'foo'
kill($x);
var_dump($x); // NULL
之所以可行,是因为在 PHP 中,不区分不存在的符号和具有 NULL
值的符号。
关于php - 是否可以从方法中删除传递给方法的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40535980/