# php-gui
**Repository Path**: dwdcth/php-gui
## Basic Information
- **Project Name**: php-gui
- **Description**: Extensionless PHP Graphic User Interface library
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2019-12-09
- **Last Updated**: 2024-11-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

Extensionless PHP Graphic User Interface library

[](https://travis-ci.org/gabrielrcouto/php-gui)
[](https://packagist.org/packages/gabrielrcouto/php-gui)
[](http://gabrielrcouto.mit-license.org/)
[](https://packagist.org/packages/gabrielrcouto/php-gui)
## Table of Contents
+ [Why](#why)
+ [Requirements](#requirements)
+ [Usage](#usage)
+ [Documentation](#documentation)
+ [How it works](#how-it-works)
+ [Contributors Guide](#contributors-guide)
+ [TO-DO](#to-do)
+ [Credits](#credits)
+ [License](#license)
## 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](http://gtk.php.net/), [PHP-QT](https://sourceforge.net/projects/php-qt/), [wxPHP](http://wxphp.org/) 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](https://packagist.org/packages/gabrielrcouto/php-gui):
#### Stable version
```bash
$ composer require gabrielrcouto/php-gui
```
#### Latest version (development)
```bash
$ 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
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:
```bash
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](https://gabrielrcouto.github.io/php-gui/dist/#/home)
But, if you want to see some examples, just follow the instructions below.
```bash
# 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](PROTOCOL.md).
## 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](http://www.lazarus-ide.org/index.php?page=downloads).
For compiling the lazarus binary:
```bash
lazbuild phpgui.lpr
```
#### Using Docker
If you are generating the Linux binary, you can use Docker:
```bash
lazarus/linux-docker.sh
cd lazarus/
lazbuild phpgui.lpr
```
### Test
First install the dependencies, and after you can run:
```bash
bin/phing
```
## TO-DO
The "Issues" page from this repository is being used for TO-DO management, just search for the "to-do" tag.
## Credits
[@gabrielrcouto](http://www.twitter.com/gabrielrcouto)
[@reisraff](http://www.twitter.com/reisraff)
## License
[MIT License](http://gabrielrcouto.mit-license.org/)
