wp_unregister_GLOBALS() in wordpress


wp_unregister_GLOBALS() in wordpress

下面的代码来自wordpress。有两件事我不明白:

/**
 * Turn register globals off.
 *
 * @access private
 * @since 2.1.0
 * @return null Will return null if register_globals PHP directive was disabled
 */
function wp_unregister_GLOBALS() {
if ( !ini_get( 'register_globals' ) )
    return;
if ( isset( $_REQUEST['GLOBALS'] ) )
    die( /*WP_I18N_GLOBALS_OVERWRITE*/'GLOBALS overwrite attempt detected'/*/WP_I18N_GLOBALS_OVERWRITE*/ );
// Variables that shouldn't be unset
$no_unset = array( 'GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix' );
$input = array_merge( $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, isset( $_SESSION ) && is_array( $_SESSION ) ? $_SESSION : array() );
foreach ( $input as $k => $v )
    if ( !in_array( $k, $no_unset ) && isset( $GLOBALS[$k] ) ) {
        $GLOBALS[$k] = null;
        unset( $GLOBALS[$k] );
    }
}

第一:"$_REQUEST['GLOBALS']"如何覆盖全局变量?第二:

$GLOBALS[$k] = null;
unset( $GLOBALS[$k] );

为什么将$GLOBALS[$k]值设置为空,然后再取消设置?我可以直接取消$GLOBALS[$k]吗?

第一:"$_REQUEST['GLOBALS']"如何覆盖全局变量?

这在PHP中启用register_globals时是可能的。因此,sSetting $_REQUEST["GLOBALS"]可能会导致GLOBALS数组被覆盖。

对于双unset()null调用,它可能与一些人在unset()的评论中声称的有关:unset()只从当前作用域中删除变量,但不一定立即销毁它并释放分配给它的空间。

在这种情况下,首先通过将其设置为null来"覆盖"变量,然后真正取消设置它是有意义的。不过,我不知道这是不是真的。