Categorías destacadas
programacion php    
Artículo
3
¡votar!

 Funciones y características de PHP que todo programador debería de conocer

El lenguaje PHP es un lenguaje muy amplio con muchas funciones, y muchas de ellas no utilizadas normalmente, cuando podrían sernos de mucha utilidad. Vamos a ver algunas funciones y características de este lenguaje, que todo el mundo debería de conocer.

1.- Funciones con un número arbitrario de argumentos

Sabemos que PHP permite funciones donde podemos indicar que algún argumento es opcional, pero también se pueden crear funciones donde todos los argumentos son opcionales. Veamos un ejemplo sacado de la página oficial.

// function with 2 optional arguments
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1n";
echo "arg2: $arg2n";
}
foo('hello','world');
/* prints:
arg1: hello
arg2: world
*/
foo();
/* prints:
arg1:
arg2:
*/


Ahora, vamos a ver cómo podemos construir una función que acepta cualquier número de argumentos. Esta vez vamos a utilizar func_get_args ():

// yes, the argument list can be empty
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach ($args as $k => $v) {
echo "arg".($k+1).": $vn";
}
}
foo();
/* prints nothing */
foo('hello');
/* prints
arg1: hello
*/
foo('hello', 'world', 'again');
/* prints
arg1: hello
arg2: world
arg3: again
*/


2.- Usando la función Glob() para encontrar archivos


La función Glob(), lo que permite es buscar archivos según la cadena que le metamos como parámetro.

// get all php files
$files = glob('*.php');
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/


También se le puede meter varios tipos de archivos a buscar.

// get all php files AND txt files
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/


La salida también puede ser una ruta, dependiendo del tipo de búsqueda que hagamos.

$files = glob('../images/a*.jpg');
print_r($files);
/* output looks like:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/


Si queremos obtener el path completo de los archivos, podemos utilizar la función realpath() para los valores retornados.

$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/


3.- Información de la memoria utilizada

Php nos ofrece funciones para poder controlar el tamaño de memoria utilizada por nuestros scripts. Para obtener el uso de la memoria actual, se puede utilizar la función memory_get_usage (), y para obtener la mayor cantidad de memoria utilizada en cualquier momento, podemos utilizar la función memory_get_usage ().

echo "Initial: ".memory_get_usage()." bytes n";
/* prints
Initial: 361400 bytes
*/
// let's use up some memory
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// let's remove half of the array
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "Final: ".memory_get_usage()." bytes n";
/* prints
Final: 885912 bytes
*/
echo "Peak: ".memory_get_peak_usage()." bytes n";
/* prints
Peak: 13687072 bytes
*/


4.- Información de uso de la CPU

Para ver esta información podemos hacer uso de la función getrusage(), aunque no está disponible bajo plataformas Windows. La información que nos daría sería la siguiente.

print_r(getrusage());
/* prints
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] => 1
[ru_nvcsw] => 67
[ru_nivcsw] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0
)

*/

Veamos ahora lo que significa cada una de las cosas que nos muestra.

  • ru_oublock: Operaciones de bloque de salida
  • ru_inblock: Operaciones de bloque de entrada
  • ru_msgsnd: Mensajes enviados
  • ru_msgrcv: Mensajes recibidos
  • ru_maxrss: Establecer el tamaño máximo de residentes.
  • ru_ixrss: Tamaño de memoria compartida
  • ru_idrss: Tamaño de datos compartidos.
  • ru_minflt: Páginas reclamadas
  • ru_majflt: Fallos de páginas
  • ru_nsignals: Señales recibidas
  • ru_nvcsw: Intercambio de contexto voluntario
  • ru_nivcsw: Intercambio de contexto involuntario
  • ru_nswap: swaps
  • ru_utime.tv_usec: Tiempo utilizado por el usuario (microsegundos)
  • ru_utime.tv_sec: Tiempo utilizado por el usuario (segundos)
  • ru_stime.tv_usec: Tiempo utilizado por el sistema (microsegundos)
  • ru_stime.tv_sec: Tiempo utilizado por el sistema (segundos)

Un ejemplo de uso podría ser el siguiente:

// loop 10 million times (busy)
for($i=0;$i<10000000;$i++) {
}
$data = getrusage();
echo "User time: ".
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 1.424592
System time: 0.004204
*/


5.- Constantes mágicas

PHP ofrece una serie de constantes que nos ayuda a conseguir ciertos valores de forma sencilla como pueden ser:

  • Número de línea (__LINE__)
  • El path del fichero (__FILE__)
  • El path del directorio (__DIR__)
  • El nombre de la función (__FUNCTION__)
  • Nombre de la clase (__CLASS__)
  • Nombre del método (__METHOD__)
  • Espacio de nombres (__NAMESPACE__)

Un ejemplo de utilización de una de estas constantes:

// some code
// ...
my_debug("some debug message", __LINE__);
/* prints
Line 4: some debug message
*/
// some more code
// ...
my_debug("another debug message", __LINE__);
/* prints
Line 11: another debug message
*/
function my_debug($msg, $line) {
echo "Line $line: $msgn";
}


6.- Generar ID's únicos

Hay situaciones en las que necesitamos generar un único id. Para ello PHP nos ofrece la función uniqid(), con lo que nos aseguramos de que sea único. Veamos un ejemplo:

// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/
// generate another unique string
echo uniqid();
/* prints
4bd67c9472340
*/
Si nos fijamos, el principio de cada cadena es el mismo, ya que esto viene relacionado por la hora del servidor.
Al id también se le puede hacer que se le añada un prefijo y/o una intropía para que sea aún más único el id.
// with prefix
echo uniqid('foo_');
/* prints
foo_4bd67d6cd8b8f
*/
// with more entropy
echo uniqid('',true);
/* prints
4bd67d6cd8b926.12135106
*/
// both
echo uniqid('bar_',true);
/* prints
bar_4bd67da367b650.43684647
*/


7.- Serialización

Si alguna vez tienes que almacenar en base de datos una array u objeto, se puede hacer de forma sencilla con el método serialize() de PHP, que convierte esas variables en cadenas de texto. Luego para deshacer los cambios, se utilizaría el método unserialize().

// a complex array
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = serialize($myvar);
echo $string;
/* prints
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
// you can reproduce the original variable
$newvar = unserialize($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/


Esta era la forma nativa que tenía PHP para serializar, pero con la llegada de JSON, han añadido soporte para esto desde la versión 5.2. Ahora también podemos utilizar las funciones json_encode() y json_decode().

// a complex array
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = json_encode($myvar);
echo $string;
/* prints
["hello",42,[1,"two"],"apple"]
*/
// you can reproduce the original variable
$newvar = json_decode($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/


Esta segunda opción es mejor, ya que los datos son más compactos y compatibles con JavaScript.

8.- Compresión de cadenas

Cuando hablamos de compresión, siempre nos viene a la cabeza archivos comprimidos en zip o en cualquier otro formato, pero PHP permite la compresión de cadenas largas por medio de los métodos gzcompress() y gzuncompress().

$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";
$compressed = gzcompress($string);
echo "Original size: ". strlen($string)."n";
/* prints
Original size: 800
*/
echo "Compressed size: ". strlen($compressed)."n";
/* prints
Compressed size: 418
*/
// getting it back
$original = gzuncompress($compressed);


9.- Registro de función de desconexión

Hay una función llamada register_shutdown_function (), que le permitirá ejecutar algunos código justo antes de que termine de ejecutar secuencias de comandos. Sea cual sea el motivo del cese de ejecución del script, lo que haya dentro de esa función se ejecutará.

$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// do some stuff
// ...
function my_shutdown() {
global $start_time;
echo "execution took: ".
(microtime(true) - $start_time).
" seconds.";
}


Vía: Net.Tutsplus
   
Publicado por:
angel carrero
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon