Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, espero que vocês gostem desta dica, então café em uma mão e notepad++ na outra.
Gostaria de falar sobre a maneira como podemos lidar com a organização de funções em PHP.
Muitos programadores PHP costumam incluir um arquivo com dezenas de funções, sempre que vão executar alguma ação, isso acontece no WordPress.
Incluir um arquivo com tantas funções para o PHP interpretar e colocar tudo na memória, acho uma tarefa um tanto exaustiva para qualquer servidor.
Porque não incluir a função apenas quando for necessária?
Vamos fazer duas coisas, primeiro cuidar da proteção dos arquivos php contendo cada função.
Os nomes de arquivos de função serão: 'functionName.fn.php'.
No .htaccess:
<Files ~ "\.(fn)\.php$">
order deny,allow
deny from all
</Files>
Isto protegerá o arquivo contra acesso direto.
Muito bem, agora vamos construir uma classe que será responsável pela a comunicação entre as funções.
<?php
class FunctionManager
{
private $pathToFunctions = '/path/to/functions/';
private $fnName = null;
private $params = array();
const FN_SUFFIX = '.fn.php';
public function __construct( $fn_path, $function_name = null, $params = null )
{
$this->pathToFunctions = $fn_path;
$this->fnName = $function_name;
$this->params = $params;
}
public static function fn( $function_name, array $params = array() )
{
if( ! function_exists( $function_name ) )
{
include $this->pathToFunctions . $function_name . static::FN_SUFFIX;
}
if( is_callable( $function_name ) )
{
return call_user_func_array( $function_name, $params );
}
else
{
throw new InvalidArgumentException( 'Expected a valid function name' );
}
}
public static function call( $function_name )
{
$args = func_get_args();
//remove $function_name
unset( $args[0] );
$args = array_values( $args );
return self::fn( $function_name, $args );
}
}Basicamente são 3 formas de uso
1 - Argumentos passados em Array
<?php
$return = FunctionManager::fn( 'FunctionName', array( 'arg1', 'arg2' ) );
2 - Herdando os argumentos do método.
<?php
$return = FunctionManager::call( 'FunctionName', /*[, mixed $arg ]*/ );
3 - Instanciando
<?php
$FunctionManager = new FunctionManager( 'other/path/to/' );
$return = $FunctionManager->fn( 'FunctionName', array('args') );
Apenas instancie quando tiver que mudar o path
Refatore a classe para se adaptar aos seus projetos!
Carregando comentários...