Uso da função de encerramento do PHP

Um, encerramento

  • 1). Fechamentos e funções anônimas foram introduzidos no PHP5.3.

  • 2). Fechamento refere-se à função que encapsula o estado em torno da função quando ela é criada. Mesmo que o ambiente onde o fechamento está localizado não exista, o estado encapsulado pelo fechamento ainda existe. Isso é semelhante ao recurso de fechamento de Javascript.

  • 3) Uma função anônima é uma função sem nome.Uma função anônima pode ser atribuída a uma variável e também pode ser passada como qualquer outro objeto PHP. Você pode pensar em funções anônimas e encerramentos como o mesmo conceito.

  • 4) Deve-se notar que a sintaxe usada por closures é a mesma das funções comuns, mas na verdade é um objeto que finge ser uma função, uma instância da classe Closure. Fechamentos, como strings ou inteiros, são tipos de valor de primeira classe.

Em segundo lugar, o uso de fechos

1. Função anônima
$变量名=functio(){  };		
2, como uma função de retorno de chamada
1)array_filter($数组,function( $v){

					规则	
					
		});
		根据规则筛选数组内容
2)$numbersPlusOne = array_map(function($number) {

    return $number + 1;
    
	}, [1, 2, 3]);
	
	根据函数内容,作用到数组每个值中,并且返回新数组

Três, status adicional

1). Observe que os encerramentos de PHP não encapsularão automaticamente o estado do aplicativo como JS. No PHP, você deve chamar o método bindTo do objeto de encerramento ou usar a palavra-chave use para anexar o estado ao encerramento de PHP.
<?php
function enclosePerson($name)
{
    return function ($doCommand) use ($name) {
        return sprintf('%s , %s', $name, $doCommand);
   } 
}
//把字符串“Clay”封装在闭包中
$clay = enclosePerson('Clay');
//传入参数,调用闭包
echo $clay('get me sweat tea!'); // Clay, get me sweat tea!

Neste exemplo, a função enclosePerson () tem um parâmetro $ name, esta função retorna um objeto de encerramento, este encerramento encapsula o parâmetro $ name, mesmo se o objeto retornado fora do escopo da função enclosePerson (), ele se lembrará de Manter o valor do parâmetro $ name, porque a variável $ name ainda está no encerramento.


2). Use a palavra-chave use para passar várias palavras-chave para o encerramento. Neste momento, use vírgulas para separar vários parâmetros, como os parâmetros de uma função ou método PHP.

3) .O fechamento do PHP ainda é um objeto, você pode usar a palavra-chave $ this para obter o estado interno do fechamento. Existe um método mágico __invoke () e um método bindTo () no estado padrão do encerramento.

4) O método .bindTo () adiciona algumas coisas interessantes ao encerramento.

Podemos usar esse método para vincular o estado interno do objeto Closure a outros objetos. O segundo parâmetro do método bindTo () pode especificar a classe PHP à qual pertence o objeto vinculado ao encerramento, para que possamos acessar as variáveis ​​de membro protegidas e privadas dessa classe.

<?php
class App
{
    protected $route = array();
    protected $responseStatus = '200 OK';
    protected $responseContentType = 'text/html';
    protected $responseBody = 'Hello world';

    public function addRoute($routePath, $routeCallback)
    {
        $this->routes[$routePath] = $routeCallback->bindTo($this, __CLASS__);
    }

    public function dispatch($currentPath)
    {
        foreach($this->routes as $routePath => $callback) {
            if ($routePath === $currentPath) {
                 $callback();
            }
        }
        header('HTTP/1.1' . $this->responseStatus);
        header('Content-type: ' . $this->responseContentType);
        header('Content-length: ' . mb_strlen($this->responseBody));
        echo $this->responseBody;
    }
}

Vinculamos o retorno de chamada de roteamento à instância do App atual, para que o estado da instância do App possa ser manipulado na função de retorno de chamada.

<?php
$app = new App();
$app->addRoute('/users/xiaoxiao', function () {
    $this->responseContentType = 'application/json;charset=utf8';
    $this->responseBody = '{"name" : "xiaoxiao"}';
});
$app->dispatch('/users/xiaoxiao');

Acho que você gosta

Origin blog.csdn.net/weixin_43272542/article/details/113125860
Recomendado
Clasificación