mirror of
https://github.com/Respect/Validation.git
synced 2026-03-16 23:35:45 +01:00
There's no reason not to make this method public. It will actually be easier for users to test their rules when they extend this class if this method is public.
40 lines
932 B
PHP
40 lines
932 B
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
use Attribute;
|
|
use Respect\Validation\Message\Template;
|
|
use Respect\Validation\Rules\Core\Simple;
|
|
|
|
use function is_numeric;
|
|
|
|
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
|
|
#[Template(
|
|
'{{name}} must be a valid Fibonacci number',
|
|
'{{name}} must not be a valid Fibonacci number',
|
|
)]
|
|
final class Fibonacci extends Simple
|
|
{
|
|
public function isValid(mixed $input): bool
|
|
{
|
|
if (!is_numeric($input)) {
|
|
return false;
|
|
}
|
|
|
|
$sequence = [0, 1];
|
|
$position = 1;
|
|
while ($input > $sequence[$position]) {
|
|
++$position;
|
|
$sequence[$position] = $sequence[$position - 1] + $sequence[$position - 2];
|
|
}
|
|
|
|
return $sequence[$position] === (int) $input;
|
|
}
|
|
}
|