• Stars
    star
    2,243
  • Rank 19,822 (Top 0.5 %)
  • Language
    PHP
  • Created about 8 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Extensionless PHP Graphic User Interface library

php-gui

Extensionless PHP Graphic User Interface library

made with PHP S2

Build Status Latest Stable Version Software License Packagist

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? 👏 You don't need to compile anything, just download the library via composer and use it! 😄

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...):

LCL graph, showing that LCL will use an interface for building the GUI according to the operation system

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.

Credits

@gabrielrcouto

@reisraff

License

MIT License

Sponsor

More Repositories

1

php-terminal-gameboy-emulator

A PHP Terminal GameBoy Emulator
PHP
1,535
star
2

awesome-php-ffi

PHP FFI examples and use cases
C
275
star
3

reaver-wps

Brute force attack against Wifi Protected Setup
C
198
star
4

phplata

PHP made cryptocurrency
PHP
132
star
5

php-itaucripto

Versão em PHP da classe Itaucripto, originalmente escrita em Java
Java
61
star
6

php-simple-neural-network

PHP Simple Neural Network
PHP
43
star
7

presentation-from-docker-to-kubernetes

How can we deploy PHP applications using Docker containers? How can we scale PHP applications using Kubernetes? This presentation will make an overview over these questions, mixing the pratical and theory.
CSS
36
star
8

palestra-async

ASYNC E WEBSOCKETS COM PHP - Palestra interativa com vários exemplos
JavaScript
28
star
9

php-computer-vision

PHP Computer Vision
PHP
27
star
10

php-convnet

Pure PHP Convolutional Neural Network
PHP
24
star
11

php-svm

Pure PHP Support Vector Machine
PHP
22
star
12

nexus7-ubuntu-12-04

Ubuntu 12.04 for Nexus 7 (2012)
15
star
13

docker-lazarus

Debian based Docker environment for building Lazarus (FPC) applications.
10
star
14

palestra-ratchet

Usando WebSockets com PHP para jogos multiplayer
JavaScript
8
star
15

presentation-from-rest-to-graphql

What is GraphQL? How can it be compared to REST? What is the pros and cons? This presentation will make an overview over these questions, mixing the pratical and theory.
CSS
7
star
16

cordova-bugsnag-plugin

Plugin that includes the native bugsnag into your project
Objective-C
6
star
17

php-metaphone-br

Versão em PHP da biblioteca Metaphone adaptada para o Português do Brasil
PHP
5
star
18

avr-sha1

SHA1 for AVR Microcontrollers
C
3
star
19

palestra-web3

CSS
2
star
20

srch

A graph based search engine built in PHP
PHP
1
star
21

palestra-webbr-2016

JavaScript
1
star