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

标签 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 是否可以从方法 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/

相关文章:

php - 阅读谷歌文档电子表格

php - MySQL Join 将不匹配的记录包含在 WHERE 语句中

PHP多维数组(usort)

java - PHP exec() jar java 文件不返回任何输出

php - 在水平 View 中显示 MYSQL 查询结果

php - 引用 - 这个错误在 PHP 中意味着什么?

php - 从本地主机发送电子邮件

php - 在页面的不同部分回显相同的 MySql 查询

php - 为什么 bcrypt() 哈希值应该存储在 (var)binary 中?

php - PHP Eclipse Internal Browser 通常有 CSS 问题吗?