Php 是否可以从方法中删除传递给方法的值
假设我有一个方法(在这个特殊情况下是一个静态方法),这个方法在给定的值上工作。一旦完成,我就可以在代码中自动删除变量(而不是函数副本) 从我所读到的所有信息来看,我怀疑这是不可能的,但我的搜索并没有发现明确的声明 示例案例: 静态方法:Php 是否可以从方法中删除传递给方法的值,php,Php,假设我有一个方法(在这个特殊情况下是一个静态方法),这个方法在给定的值上工作。一旦完成,我就可以在代码中自动删除变量(而不是函数副本) 从我所读到的所有信息来看,我怀疑这是不可能的,但我的搜索并没有发现明确的声明 示例案例: 静态方法: public static function checkKey($keyValue = null) { if(!is_null($keyValue) && !empty($keyValue)) { if($_SESSION
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
的值
事实上,它是一个静态方法不应该太关键,它更重要的是函数的形状。当变量作为参数传递时,函数是否有办法删除函数/方法外部设置的值
我意识到如果整个事情都包装在一个类中,并且变量保存为类级变量(unset(var)
),这是可能的,但是我很好奇是否有能力从范围之外“访问”变量,例如
public static function checkKey($keyValue = null)
{
unset(\$keyValue);
}
我只有有限的使用名称空间的经验,但这是我最好的猜测,如果这是可能的,如何去做
简化等效结果:
我试图达到的是这一行动,完全在方法之内:
$valueToBeChecked = "something"
AbstractClass::checkKey($valueToBeChecked);
unset($valueToBeChecked);
不能从函数中取消设置变量并传播该效果。根据: 如果通过引用传递的变量在函数内部为unset(),则只销毁局部变量。调用环境中的变量将保留与调用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
值的符号之间没有区别。那么您想知道函数是否可以修改其调用方的堆栈帧吗?@bishop是的,听起来很像。我想如果通过引用传递变量,可能会起作用。我认为实际上这是不可能的,你不应该这样做。选择一种新的设计模式。你永远不应该这样做。你检查一把钥匙,然后,作为一种副作用,取下钥匙。避免副作用。如果必须存在副作用,则应使副作用明显。方法名为checkKey
,但它的实际行为和副作用是checkKey和moveifvaluedoesnotmatch
。如果一个函数需要一个长名称来描述它正在做什么,那么它就会感觉到这个函数做得太多了。与其在函数中进行整理,不如在父函数中根据返回值进行整理if(!AbstractClass::checkKey($value)){unset($value,$\u SESSION['keyValue']);}
应该不惜一切代价避免这种编程。@self我同意。这是一个熊陷阱的副作用。这个答案足以涵盖我想要的,谢谢。