<?php



class ClassDeclaration
{

}

abstract class CorrectClassDeclarationWithExtends extends correctClassDeclaration
{

}

final class CorrectClassDeclarationWithImplements implements correctClassDeclaration
{

}

// Incorrect placement of opening/closing braces, including indent.
class IncorrectBracePlacement
{
}

class IncorrectBracePlacementWithExtends extends correctClassDeclaration
{
}

class IncorrectBracePlacementWithImplements implements correctClassDeclaration
{
}

class IncorrectIndentedClass
{

}//end class

// Incorrect code placement for opening/closing brace.
class IncorrectCodeAfterOpeningBrace
{
 echo phpinfo();

}//end class

class IncorrectCodeAfterClosingBrace
{

} 

echo phpinfo();


class IncorrectCodeBeforeClosingBrace
{

echo phpinfo(); 
}

class IncorrectIndentedClass
{

}

class ClassOne implements ClassTwo, ClassThree
{
}//end class

class ClassOne implements ClassFour, ClassFive, ClassSix
{
}//end class

class CorrectClassDeclarationWithExtends extends correctClassDeclaration
{

}

class CorrectClassDeclarationWithExtends extends correctClassDeclaration
{

}//end class

class CorrectClassDeclaration
{

}//end class

class CorrectClassDeclaration extends CorrectClassDeclaration2 implements ICorrectClassDeclaration
{

} // phpcs:enable Standard.Category.Sniff

class File implements \Zend_Auth_Storage_Interface, \Zend_Auth_Storage, \Zend_Foo
{
}

interface MyInterface
{

}

?>

<?php

class MyClass2
{
    var $x;
}


/**
 * No error.
 */
function example() {}

class CorrectClassDeclaration
{

}//end class

// Class comment here, but wrong comment type.
class testing
{
} /* end class */ 

echo 'hi';

class IncorrectCodeBeforeClosingBrace
{

echo phpinfo();
}

readonly class Test
{
}

readonly class Test
{
}

class TooMuchSpacingBelowClassButShouldNotBeFlaggedWhenNextThingIsFunctionWithAttribute
{
    var $x;
}


#[AttributesShouldBeJumpedOver]
function ThisIsFineAndHasAttribute() {}

class TooMuchSpacingBelowClassButShouldNotBeFlaggedWhenNextThingIsFunctionWithDocblockAndAttribute
{
    var $x;
}


/**
 * No error.
 */
#[AttributesShouldBeJumpedOver]
#[ASecondAttributeShouldBeJumpedOverToo]#[AndAThirdAsWell]
function ThisIsFineAndHasDocblockAndAttribute() {}
