PHP Gui
Extensionless PHP Graphic User Interface library

Extensionless PHP Graphic User Interface library

#Table of Contents
#Why
PHP can be more than a "Web Language", it's a fast language, with a cross platform interpreter and a good CLI. GUI is a natural step for completing this ecosystem.
For many years, GUI projects are being developed for PHP, like PHP-GTK, PHP-QT, wxPHP and so many others, but none of them became popular.
This project aims to solve the most common problems of existing "GUI Projects":
- The need for installing an extension
- Cross platform
- No external dependencies
- Easy to install (composer require php-gui) / Easy to use ($button = new Button)
#Requirements
The following PHP versions are supported:
- PHP 5.6
- PHP 7
- HHVM
And OS:
- Linux x64
- Windows x64
- Mac OSX (tested on 10.10.x and 10.11.x)
#Usage
Download the library using composer:
#Stable version
$ composer require gabrielrcouto/php-gui
#Latest version (development)
$ composer require gabrielrcouto/php-gui:dev-master
Now, you can build a GUI application. Let's do a Hello World!
Create the file 'myapp.php':
<?php require 'vendor/autoload.php'; use Gui\Application; use Gui\Components\Button; $application = new Application(); $application->on('start', function() use ($application) { $button = (new Button()) ->setLeft(40) ->setTop(100) ->setWidth(200) ->setValue('Look, I\'m a button!'); $button->on('click', function() use ($button) { $button->setValue('Look, I\'m a clicked button!'); }); }); $application->run();
Now, run it:
php myapp.php
Simple? :clap: You don't need to compile anything, just download the library via composer and use it! :smile:
#Documentation
We have a Documentation Page
But, if you want to see some examples, just follow the instructions below.
# clone the repository git clone https://github.com/gabrielrcouto/php-gui.git cd php-gui # install dependencies composer install # run examples php examples/01-basic/example.php php examples/02-animation/example.php php examples/03-window/example.php php examples/04-multiple-windows/example.php php examples/05-canvas/example.php php examples/06-ping/example.php php examples/07-php-internals/example.php php examples/08-alert/example.php php examples/09-3d-perspective/example.php
#How it works
To create a GUI without the need for an extension, PHP executes a binary with proc_open and communicates with it using Stdin/Stdout Pipes--it's a fast and cross platform solution.
PHP <=> Stdin/Stdout Pipes <=> Lazarus Application <=> GUI
The binary is created using Lazarus (Free Pascal). After much research, I found a large advantage by using Lazarus over other desktop languages (like C#, Java...):
![]()
It doesn't have any dependencies (except for Linux, which needs GTK), has a good component library, is compiled, open source and has a nice slogan (Write Once, Compile Anywhere).
The communication (IPC) between PHP and Lazarus is performed using a protocol based on JSON RPC. You can view the specification here.
#Contributors Guide
#Components names
To be an easy to use library, this project will use HTML friendly names for the components, as PHP developers are more familiar with it.
Examples:
- On Lazarus, the property "caption" is for the text of a button. On php-gui, the property name is "value".
- On Lazarus, "Edit" is the component for text input, on php-gui, it's "InputText".
#Compiling Lazarus App
#On your Local Machine
First, you need to install Lazarus.
For compiling the lazarus binary:
lazbuild phpgui.lpr
#Using Docker
If you are generating the Linux binary, you can use Docker:
lazarus/linux-docker.sh
cd lazarus/
lazbuild phpgui.lpr
#Test
First install the dependencies, and after you can run:
bin/phing
#TO-DO
The "Issues" page from this repository is being used for TO-DO management, just search for the "to-do" tag.