Output
The Output class provides methods for formatting and displaying text in the terminal with colors, styles, and various formatting options.
Class Definition
namespace Yalla\Output;
class Output
{
private bool $supportsColors;
// Color constants
const RESET = "\033[0m";
const BLACK = "\033[30m";
const RED = "\033[31m";
const GREEN = "\033[32m";
const YELLOW = "\033[33m";
const BLUE = "\033[34m";
const MAGENTA = "\033[35m";
const CYAN = "\033[36m";
const WHITE = "\033[37m";
// Background color constants
const BG_BLACK = "\033[40m";
const BG_RED = "\033[41m";
const BG_GREEN = "\033[42m";
const BG_YELLOW = "\033[43m";
const BG_BLUE = "\033[44m";
const BG_MAGENTA = "\033[45m";
const BG_CYAN = "\033[46m";
const BG_WHITE = "\033[47m";
// Style constants
const BOLD = "\033[1m";
const DIM = "\033[2m";
const UNDERLINE = "\033[4m";
}Constructor
public function __construct()Creates a new Output instance and automatically detects color support.
Basic Output Methods
write()
public function write(string $message, bool $newline = false): voidWrites text to the output.
Parameters
$message(string): The message to write$newline(bool): Whether to add a newline after the message
Example
$output->write('Processing...');
$output->write(' Done!', true); // Adds newlinewriteln()
public function writeln(string $message): voidWrites text with a newline.
Parameters
$message(string): The message to write
Example
$output->writeln('Hello World');
$output->writeln('Next line');Semantic Output Methods
success()
public function success(string $message): voidDisplays a success message in green.
$output->success('✓ Operation completed successfully!');error()
public function error(string $message): voidDisplays an error message in red.
$output->error('✗ Operation failed');warning()
public function warning(string $message): voidDisplays a warning message in yellow.
$output->warning('⚠ This action cannot be undone');info()
public function info(string $message): voidDisplays an info message in cyan.
$output->info('ℹ Loading configuration...');Color and Style Methods
color()
public function color(string $text, string $color): stringApplies color to text.
Parameters
$text(string): The text to color$color(string): Color constant (e.g., Output::RED)
Returns
string: Colored text (or plain text if colors not supported)
Example
$red = $output->color('Error', Output::RED);
$output->writeln($red);
// With background
$highlighted = $output->color('Important', Output::BG_YELLOW);bold()
public function bold(string $message): voidDisplays text in bold.
$output->bold('Important Notice');dim()
public function dim(string $message): voidDisplays dimmed/faded text.
$output->dim('Less important note');underline()
public function underline(string $message): voidDisplays underlined text.
$output->underline('Click here');Formatting Methods
table()
public function table(array $headers, array $rows): voidDisplays data in a formatted table.
Parameters
$headers(array): Column headers$rows(array): Array of row data
Example
$output->table(
['ID', 'Name', 'Status'],
[
['1', 'Server A', 'Running'],
['2', 'Server B', 'Stopped'],
]
);Output:
│ ID │ Name │ Status │
├────┼──────────┼─────────┤
│ 1 │ Server A │ Running │
│ 2 │ Server B │ Stopped │box()
public function box(string $content, string $color = self::WHITE): voidDraws a box around content.
Parameters
$content(string): Content to display in the box$color(string): Box color (default: white)
Example
$output->box('Welcome!', Output::CYAN);Output:
╔═══════════╗
║ Welcome! ║
╚═══════════╝section()
public function section(string $title): voidCreates a section header.
Parameters
$title(string): Section title
Example
$output->section('Configuration');Output:
━━━ Configuration ━━━tree()
public function tree(array $items, int $level = 0): voidDisplays hierarchical data as a tree.
Parameters
$items(array): Hierarchical array data$level(int): Starting indentation level
Example
$output->tree([
'src' => [
'Commands' => ['Command.php', 'HelpCommand.php'],
'Output' => ['Output.php']
],
'tests' => 'Test files'
]);Output:
src:
├── Commands:
│ ├── Command.php
│ └── HelpCommand.php
└── Output:
└── Output.php
tests: Test filesProgress Indicators
progressBar()
public function progressBar(int $current, int $total, int $width = 50): voidDisplays a progress bar.
Parameters
$current(int): Current progress value$total(int): Total value$width(int): Bar width in characters (default: 50)
Example
for ($i = 0; $i <= 100; $i++) {
$output->progressBar($i, 100);
usleep(50000);
}Output:
[██████████████████████████████████████████████████] 100%spinner()
public function spinner(int $step = 0): voidDisplays a spinner animation.
Parameters
$step(int): Animation step
Example
for ($i = 0; $i < 50; $i++) {
$output->spinner($i);
usleep(100000);
}
$output->write("\r"); // Clear spinnerPlatform Detection
The Output class automatically detects platform capabilities:
// Check if colors are supported
if ($output->hasColorSupport()) {
// Use colors
}Windows Support
On Windows, checks for:
- ANSICON environment variable
- ConEmu terminal
Unix Support
On Unix systems, checks for:
- TTY availability
- Terminal type
Complete Example
<?php
use Yalla\Output\Output;
$output = new Output();
// Section header
$output->section('System Status');
// Status messages
$output->success('✓ Database connected');
$output->error('✗ Cache server unreachable');
$output->warning('⚠ High memory usage');
$output->info('ℹ 3 updates available');
// Table
$output->section('Services');
$output->table(
['Service', 'Status', 'CPU', 'Memory'],
[
['nginx', 'Running', '0.2%', '45MB'],
['mysql', 'Running', '1.5%', '512MB'],
['redis', 'Stopped', '0.0%', '0MB'],
]
);
// Progress
$output->section('Processing');
for ($i = 0; $i <= 100; $i += 10) {
$output->progressBar($i, 100);
usleep(100000);
}
$output->writeln('');
// Tree
$output->section('Project Structure');
$output->tree([
'app' => [
'Commands' => '15 files',
'Models' => '8 files',
],
'tests' => '42 files'
]);
// Box
$output->box('Task completed!', Output::GREEN);Testing Output
test('output displays colored text', function () {
$output = Mockery::mock(Output::class);
$output->shouldReceive('success')
->once()
->with('Operation successful');
$output->shouldReceive('error')
->once()
->with('Operation failed');
// Test your command that uses output
});Performance Tips
- Buffer Output: For many lines, consider buffering
- Minimize Redraws: Use
\rfor updating single lines - Check Color Support: Disable colors when piping output
// Efficient progress updates
$output->write("\r" . $output->color("Progress: $percent%", Output::GREEN));See Also
- Command - Using Output in commands
- Application - Application output handling