我怎样才能删除 PHP int 中的位标志?

how can i remove a bit flag in PHP int?

假设我有

$flags=JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;

我怎样才能从 $flags 中删除 JSON_UNESCAPED_SLASHES?

不是"C method"它只是应用bitwise operators

$flags=JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;

var_dump($flags & JSON_UNESCAPED_SLASHES); // flag should be set to 1

$flags &= ~JSON_UNESCAPED_SLASHES; // remove it  

var_dump($flags & JSON_UNESCAPED_SLASHES); // flag should be set to 0

使用the C method

$flags &= ~JSON_UNESCAPED_SLASHES;

seems to work.

如果您无法直接访问标志,因为稍后会在第 3 方代码 中添加它们:

<?php

function notMyFunction($flags)
{
    $finalFlags = $flags | FLAG_I_DONT_WANT;
    // ...
}

有这个技巧:

<?php


notMyFunction(FLAG_I_DONT_WANT - 1);