Crie uma função hookable em PHP

As funções variáveis ​​podem ser divertidas e permitir que outras pessoas estendam seu código.

Veja como se divertir com eles.

Comece simples primeiro

Imagine alguns arquivos

// main.php

require_once
( 'extended_functions.php' );
$suffixes
= array( "_custom",
"_custom1",
"_custom2",
);

run_variable_functions
( $suffixes , "my_arg" );

function run_variable_functions( $suffixes , $arg ) {
foreach ( $suffixes as $suffix ) :

$function
= "my_variable_function$suffix";

if ( function_exists( $function ) )
$function
( $arg );

endforeach
;
}

E

// extended_functions.php
function my_variable_function_custom ( $arg ) {
// Some code goes here.
}
function my_variable_function_custom1 ( $arg ) {
// Some code goes here.
}
function my_variable_function_custom2 ( $arg ) {
// Some code goes here.
}

Então, aqui teríamos algumas funções definidas no arquivo “extended functions.php”, e a que lida com tudo está em “main.php”.

Vamos melhorar

Você pode tornar isso mais dinâmico simplesmente tendo uma pasta onde todos os códigos de extensão vão e, em seguida, pegar um pouco de cada vez.

Então, vamos começar com novos arquivos:

main.php

 // main.php

$suffixes
= array();
$extensions
= scandir( '../extensions' );
foreach ( $extensions as $file ) :
if ( strpos( $file , ".php" ) )
include
( "../$file" );
endforeach
;

run_variable_functions
( $suffixes , "my_arg" );

function run_variable_functions( $suffixes , $arg ) {
foreach ( $suffixes as $suffix ) :

$function
= "my_variable_function_$suffix";

if ( function_exists( $function ) )
$function
( $arg );

endforeach
;
}

extension_one.php

// extension_one.php
if ( ! function_exists( 'my_variable_function_custom' ) ) {
function my_variable_function_custom( $arg ) {
// insert some code
}
$suffixes
[] = "custom";
}

extension_two.php

// extension_two.php
if ( ! function_exists( 'my_variable_function_custom2' ) ) {
function my_variable_function_custom2( $arg ) {
// insert some code
}
$suffixes
[] = "custom2";
}

Então, você verá que em main.php, tudo o que fazemos é criar um array vazio, então verificamos o diretório “extensions” e incluímos apenas aqueles com extensão de arquivo php. Depois disso, temos nossas funções de variável de execução função que apenas percorre a matriz de sufixos e tenta executar cada um.

A estrutura dos arquivos de extensão é importante porque eles fazem duas coisas: primeiro, definem a função e, segundo, adicionam uma entrada à matriz de sufixos. Para evitar erros de funções conflitantes, é melhor envolver cada função com a instrução “if (! Function_exists (function))”; caso contrário, seus colaboradores podem facilmente quebrar seu bom aplicativo.

Você pode fazer a mesma coisa com arquivos de classe.