Определение - программные сущности должны быть открыты к расширению и закрыты для изменений (можем изменить поведение без изменения исходного кода).

Пример нарушения:

<?php

interface Shape
{
}

class Square implements Shape
{
}

class Circle implements Shape
{
}

class ShapeDrawer
{
    public function draw(Shape ...$shapes)
    {
        foreach ($shapes as $shape) {
            if ($shape instanceof Square) {
                $this->drawSquare($shape);
            } elseif ($shape instanceof Circle) {
                $this->drawCircle($shape);
            }
        }
    }

    private function drawSquare(Square $square)
    {
        // some code
    }

    private function drawCircle(Circle $circle)
    {
        // some code
    }
}

$shapes = [new Square(), new Circle()];
$drawer = new ShapeDrawer();
$drawer->draw(...$shapes);

Получается при добавлении новых фигур - нам придется изменять метод draw, и класс ShapeDrawer.

Чтобы этого избежать - мы можем переписать наш код следующим образом:

<?php

interface Shape
{
    public function draw(): void;
}

class Square implements Shape
{
    public function draw(): void
    {
        // some code
    }
}

class Circle implements Shape
{
    public function draw(): void
    {
        // some code
    }
}

class ShapeDrawer
{
    public function draw(Shape ...$shapes)
    {
        foreach ($shapes as $shape) {
            $shape->draw();
        }
    }
}

$shapes = [new Square(), new Circle()];
$drawer = new ShapeDrawer();
$drawer->draw(...$shapes);