PHPackages                             visionp/plains - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. visionp/plains

ActiveProject

visionp/plains
==============

Test task

v0.1.0(4y ago)08PHPPHP 8.\*

Since Oct 6Pushed 4y ago1 watchersCompare

[ Source](https://github.com/visionp/plains)[ Packagist](https://packagist.org/packages/visionp/plains)[ RSS](/packages/visionp-plains/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (1)Versions (2)Used By (0)

The task is to build the structure of classes and methods for:

1. Airplane Aeroprakt A-24 2) Airplane Curtiss NC-4 3) Airplane Boeing 747 Considerations
2. They can all takeoff, fly, and land.
3. Aeroprakt A-24 and Boeing 747 have wheels, meaning they can takeoff and land on a runway.
4. Curtiss NC-4 and Aeroprakt A-24 can takeoff and land on water.
5. Aeroprakt A-24 and Curtiss NC-4 can only fly in the daytime and in good weather. 5) Boeing 747 can fly at any time and in any weather.

Example:

```
use Plains\ConditionsBag;
use Plains\Plain;
use Plains\Specifications\ActionSpecification;
use Plains\Specifications\AndSpecification;
use Plains\Specifications\DayTimeSpecification;
use Plains\Specifications\OrSpecification;
use Plains\Specifications\TypeRunwaySpecification;
use Plains\Specifications\WeatherSpecification;

$specificationCanTakeoffLandOnRunway = new AndSpecification(
    new OrSpecification(
        new ActionSpecification(ConditionsBag::LAND),
        new ActionSpecification(ConditionsBag::TAKE_OFF)
    ),
    new TypeRunwaySpecification(ConditionsBag::Runway)
);

$specificationCanTakeoffLandOnWater = new AndSpecification(
    new OrSpecification(
        new ActionSpecification(ConditionsBag::LAND),
        new ActionSpecification(ConditionsBag::TAKE_OFF)
    ),
    new TypeRunwaySpecification(ConditionsBag::WATER)
);
$specificationCanFlyDayTimeGoodWeather = new AndSpecification(
    new ActionSpecification(ConditionsBag::FLY),
    new DayTimeSpecification(ConditionsBag::DAY),
    new WeatherSpecification(ConditionsBag::GOOD)
);

$specification = new OrSpecification(
    $specificationCanTakeoffLandOnRunway,
    $specificationCanTakeoffLandOnWater,
    $specificationCanFlyDayTimeGoodWeather,
);

$plain = new Plain('AeropraktA24', $specification);

$conditions = new ConditionsBag();
$conditions->setAction(ConditionsBag::TAKE_OFF);
$conditions->setTypeRunway(ConditionsBag::Runway);

$plain->can($conditions);

```

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1684d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/eb91b5ab7a7007447b6451e7c107cac1655506808ae90474931f91905f11783f?d=identicon)[visionp](/maintainers/visionp)

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/visionp-plains/health.svg)

```
[![Health](https://phpackages.com/badges/visionp-plains/health.svg)](https://phpackages.com/packages/visionp-plains)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
