1. Go to this page and download the library: Download solidframe/phpstan-rules library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
solidframe / phpstan-rules example snippets
// OK
final readonly class PlaceOrderHandler implements CommandHandler
{
public function __invoke(PlaceOrder $command): void { /* ... */ }
}
// ERROR: Command handler must return void
final readonly class PlaceOrderHandler implements CommandHandler
{
public function __invoke(PlaceOrder $command): Order { /* ... */ }
}
// OK
final readonly class GetOrderHandler implements QueryHandler
{
public function __invoke(GetOrder $query): OrderDto { /* ... */ }
}
// ERROR: Query handler must return a value
final readonly class GetOrderHandler implements QueryHandler
{
public function __invoke(GetOrder $query): void { /* ... */ }
}
// OK
final readonly class PlaceOrderHandler implements CommandHandler
{
public function __invoke(PlaceOrder $command): void { /* ... */ }
}
// ERROR: Handler must implement __invoke()
final readonly class PlaceOrderHandler implements CommandHandler
{
public function handle(PlaceOrder $command): void { /* ... */ }
}
// ERROR: Handler must have only one public method
final readonly class PlaceOrderHandler implements CommandHandler
{
public function __invoke(PlaceOrder $command): void { /* ... */ }
public function anotherMethod(): void { /* ... */ }
}
// OK
final readonly class PlaceOrder implements Command {}
// ERROR: Command must be final
class PlaceOrder implements Command {}
// ERROR: Command must be readonly
final class PlaceOrder implements Command {}
// OK
final readonly class PlaceOrder implements Command
{
public function __construct(public string $orderId) {}
}
// ERROR: Commands/Queries must not extend other classes
final readonly class PlaceOrder extends BaseCommand implements Command {}
// OK
final readonly class Email extends StringValueObject {}
// ERROR: Value object must be readonly
final class Email extends StringValueObject {}
// OK
$order = Order::place($orderId, $customerId);
// ERROR: Use a static factory method instead of new
$order = new Order($orderId);
// OK
final readonly class OrderPlaced implements DomainEventInterface {}
// ERROR: Event must be final and readonly
class OrderPlaced implements DomainEventInterface {}
// OK
final class Order extends AbstractEventSourcedAggregateRoot
{
public function place(): void
{
$this->recordThat(new OrderPlaced(/* ... */));
}
protected function applyOrderPlaced(OrderPlaced $event): void
{
// apply state change
}
}
// ERROR: Missing method applyOrderPlaced
final class Order extends AbstractEventSourcedAggregateRoot
{
public function place(): void
{
$this->recordThat(new OrderPlaced(/* ... */));
}
// no applyOrderPlaced method!
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.