当autoload标志为false时,class_exists

So, as part of a project, I was considering building a flagging system. The idea behind this would be a cron job that runs daily to determine whether each of a series of flags still applied to a specific object (and if so, save that flag data for the object).

// code stub
$flags = $this->getFlags();
foreach($flags as $flag)
{
    $className = 'Svc_Flags_'.$flag->flag_code; 

    if(class_exists($className, false)
    {
        (new $className())->setFlag();
    }
}

And right now, in the dummy code for that class, I have a constructor that echos a simple text message, and the function setFlag() that echos a different text message.

<?php class Svc_Flags_Test extends Svc
{

public function __construct()
{
    echo 'construct<br/>';
}

public function setFlag()
{
    echo 'set flag<br/>';
}

}

Now, this doesn't work. By that, I mean that I am not seeing either echo.

However, if I do this:

// code stub
$flags = $this->getFlags();
foreach($flags as $flag)
{
    $className = 'Svc_Flags_'.$flag->flag_code; 

    (new $className())->setFlag(); // This is the added line of code

    if(class_exists($className, false)
    {
        (new $className())->setFlag();
    }
}

I get the constructor echo, and the setFlag() echo TWICE.

Why is this happening? Now, I'm pretty sure I could just wrap part of this in a try/catch block to get past any errors if a class isn't there, but I'm curious as to why it doesn't seem to find the class unless I explicitly call it before the if statement.