Giter VIP home page Giter VIP logo

php_timers_promise_async_await_thread's Introduction

PHP ^7.2 || ^8.0

const DEVELOPER_INFO = [
    "autor" => "Matheus Johann Araújo",
    "country" => "Brasil",
    "state" => "Pernambuco",
    "date" => "2022-03-12"
];
  • O termo callback significa função passada como parâmetro de uma função, que será chamado por uma função. Em PHP os callbacks são do tipo callable que significa chamável;

  • A classe chamada Closure é responsável por representar funções anônimas e arrow functions (funções de seta);

  • Os callback normalmente são funções não nomeadas (funções anônimas ou de seta) que são passadas por parâmetro, mas nada impede que uma função nomeada seja passada como parâmetro!

A biblioteca Timers serve para definir funções (callbacks) que devem ser executadas após um determinado tempo, assim como é na linguagem JavaScript

Timers implementa as funções setInterval, setTimeout, clearInterval e clearTimeout:

  • setInterval(callback, milliseconds) executa a chamada da função callback no tempo informado de modo infinito. A função retorna um UID que pode ser utilizado na função clearInterval para remover o setInterval da fila de execução;

  • setTimeout(callback, milliseconds) executa a chamada da função callback no tempo informado de modo único. A função retorna um UID que pode ser utilizado na função clearTimeout para remover o setTimeout da fila de execução;

  • clearInterval(UID) finaliza a futura execução do setInterval que possui o UID informado. A função retorna true (finalizou) ou false (não finalizou ou não encontrou a tarefa agendada);

  • clearTimeout(UID) finaliza a futura execução do setTimeout que possui o UID informado. A função retorna true (finalizou) ou false (não finalizou ou não encontrou a tarefa agendada).

Usando a biblioteca Timers:

<?php

// EN-US: Include at the beginning of the first file to be interpreted, on the WEB server use TICK sparingly
// PT-BR: Incluir no início do primeiro arquivo a ser interpretado, no servidor WEB use o TICK com moderação
declare(ticks=1);

require_once "lib/code.php";

echo "Start", PHP_EOL;

$counter = 1;

$uid = setInterval(function() use (&$counter) {
    echo "Counter: ", $counter++, PHP_EOL;
}, 100);

setTimeout(function() {
    echo "Half of the increments", PHP_EOL;
}, 1000);

setTimeout(function() use ($uid) {
    echo "Stopping the counter", PHP_EOL;
    clearInterval($uid);
}, 2000);

echo "Processing...", PHP_EOL;

// EN-US: Include after timed calls
// PT-BR: Incluir após chamadas programadas (agendadas)
$count = workWait(function() { usleep(1); });
echo "workRun has been run ${count} times", PHP_EOL;

echo "End", PHP_EOL;

Observação: A biblioteca Timers permite escalonar o uso do núcleo de processamento, dando a impressão de que a execução do código se encontra em modo "assíncrono", porém tudo ocorre de maneira síncrona.

Promise é uma biblioteca que implementa o modelo de funcionamento da Promise em JavaScript.

  • then(callback) método chamado quando a Promise é resolvida. O callback será executado e receberá como parâmetro o valor passado na função resolve;

  • catch(callback) método chamado quando a Promise é rejeitada. O callback será executado e receberá como parâmetro o valor passado na função reject;

  • finally(callback) método chamado após uma Promise ser resolvida ou rejeitada, que dispara a execução do callback informado como parâmetro.

Vejo o exemplo abaixo de como utilizar:

<?php

// EN-US: Include at the beginning of the first file to be interpreted, on the WEB server use TICK sparingly
// PT-BR: Incluir no início do primeiro arquivo a ser interpretado, no servidor WEB use o TICK com moderação
declare(ticks=1);

require_once "lib/code.php";

echo "Start", PHP_EOL;

$promise = new Promise(function($resolve, $reject) {
    $call = rand(0, 1) ? $resolve : $reject;
    setTimeout(function() use($call) {
        $call("message");
    }, 1000);
});

function info_promise() {
    global $promise;
    echo "> monitor: ", $promise->getMonitor(), PHP_EOL;
    echo "> state: ", $promise->getState(), PHP_EOL;
}

info_promise();

$promise->then(function($result) {
    echo "then (${result})", PHP_EOL;
    info_promise();
})->catch(function($error) {
    echo "catch (${error})", PHP_EOL;
    info_promise();
})->finally(function() {
    echo "finally", PHP_EOL;
    info_promise();
});

echo "Processing...", PHP_EOL;
for ($counter = 0; $counter < 10; $counter++) {
    echo "Counter: ${counter}", PHP_EOL;
    usleep(200000);
}

// EN-US: Include after timed calls
// PT-BR: Incluir após chamadas programadas (agendadas)
$count = workWait(function() { usleep(1); });
echo "workRun has been run ${count} times", PHP_EOL;

echo "End", PHP_EOL;

php_timers_promise_async_await_thread's People

Contributors

matheusjohannaraujo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.