无法使用或在if语句中使用

时间:2015-05-29 02:17:24

标签: php

我在这里有一点问题,如果我使用'或'一切都返回false,继承我的代码:

internal class FileReplacementMiddleware : OwinMiddleware
{
    public FileReplacementMiddleware(OwinMiddleware next) : base(next) {}

    public override async Task Invoke(IOwinContext context)
    {
        MemoryStream memStream = null;
        Stream httpStream = null;
        if (ShouldAmendResponse(context))
        {
            memStream = new MemoryStream();
            httpStream = context.Response.Body;
            context.Response.Body = memStream;
        }

        await Next.Invoke(context);

        if (memStream != null)
        {
            var content = await ReadStreamAsync(memStream);
            if (context.Response.StatusCode == 200)
            {
                content = AmendContent(context, content);
            }
            var contentBytes = Encoding.UTF8.GetBytes(content);
            context.Response.Body = httpStream;
            context.Response.ETag = null;
            context.Response.ContentLength = contentBytes.Length;
            await context.Response.WriteAsync(contentBytes, context.Request.CallCancelled);
        }
    }

    private static async Task<string> ReadStreamAsync(MemoryStream stream)
    {
        stream.Seek(0, SeekOrigin.Begin);
        using (var reader = new StreamReader(stream, Encoding.UTF8))
        {
            return await reader.ReadToEndAsync();
        }
    }

    private bool ShouldAmendResponse(IOwinContext context)
    {
        // logic
    }

    private string AmendContent(IOwinContext context, string content)
    {
        // logic
    }
}

如果我只是使用!=&#39; name&#39;它运作正常,无论是谁或&#39;它没有

3 个答案:

答案 0 :(得分:2)

这不起作用,因为这不是逻辑表达式的工作方式。

您必须将每个字符串与$_SESSION["login"]进行比较:

if($_SESSION["login"] != 'joaomonteiro' 
    and $_SESSION["login"] != 'm1n6u3x' 
    and $_SESSION["login"] != 'jorgesaado17' ){

修改:如果应使用or运算符代替and,则只需稍加更改:

if(!($_SESSION["login"] == 'joaomonteiro' 
    or $_SESSION["login"] == 'm1n6u3x' 
    or $_SESSION["login"] == 'jorgesaado17' ){

答案 1 :(得分:1)

您必须将每个逻辑比较与字符串进行比较。

if($_SESSION["login"] != 'joaomonteiro' && $_SESSION["login"] != 'm1n6u3x' && $_SESSION["login"] != 'jorgesaado17') {
  // code
}

答案 2 :(得分:0)

那是因为你基本上是在说:

if($_SESSION['login'] != 'joaomonteiro' or true or true) {

}

如果你这样做

var_dump((boolean)"m1n6u3x");
var_dump((boolean)"jorgesaado17");

它们都将返回true。

我建议你阅读关于布尔值的文件

Booleans