What are some best practices for creating object-oriented PHP scripts for generating tables with customizable cell values?

When creating object-oriented PHP scripts for generating tables with customizable cell values, it is important to follow best practices such as encapsulation, inheritance, and polymorphism. By creating separate classes for the table, rows, and cells, you can easily customize the content and appearance of each cell while maintaining a clean and modular code structure.

<?php

class Table {
    private $rows = array();

    public function addRow(Row $row) {
        $this->rows[] = $row;
    }

    public function render() {
        echo '<table>';
        foreach ($this->rows as $row) {
            $row->render();
        }
        echo '</table>';
    }
}

class Row {
    private $cells = array();

    public function addCell(Cell $cell) {
        $this->cells[] = $cell;
    }

    public function render() {
        echo '<tr>';
        foreach ($this->cells as $cell) {
            $cell->render();
        }
        echo '</tr>';
    }
}

class Cell {
    private $value;

    public function __construct($value) {
        $this->value = $value;
    }

    public function render() {
        echo '<td>' . $this->value . '</td>';
    }
}

// Create a new table
$table = new Table();

// Create a row
$row = new Row();

// Add cells to the row
$row->addCell(new Cell('Cell 1'));
$row->addCell(new Cell('Cell 2'));
$row->addCell(new Cell('Cell 3'));

// Add the row to the table
$table->addRow($row);

// Render the table
$table->render();

?>