|
|
 |
func_get_arg (PHP 4, PHP 5) func_get_arg -- Devolver un elemento desde la lista de
argumentos Descripciónmixed func_get_arg ( int num_arg )
Devuelve el argumento en la posición
num_arg en la lista de argumentos de una
función definida por el usuario. Los argumentos de
función son contados comenzando desde
cero. func_get_arg() generará una
advertencia si es llamada desde afuera de una definición
de función. Esta función no puede ser usada
directamente como un parámetro de función. En su
lugar, su resultado puede ser asignado a una variable, la cual
puede ser pasada entonces a la función.
Si num_arg es mayor que el número
de argumentos pasados en el contexto actual, se generará
una advertencia y func_get_arg()
devolverá FALSE.
Nota: Because this function depends on the
current scope to determine parameter details, it cannot be used as a
function parameter. If you must pass this value, assign the results to a
variable, and pass the variable.
func_get_arg() puede ser usada en conjunto con
func_num_args() y
func_get_args() para permitir que funciones
definidas por el usuario acepten listas de argmuntos de longitud
variable.
bishop
10-Dec-2004 09:58
Regarding a "deferment" operator for dvogel at ssc dot wisc dot edu, pick your poison:
<?php
function pick($a,$b) { return (isset($a) ? $a : $b); }
$a = (pick($b,$c) ? pick($c,$d) : null);
?>
<?php
function pick($a) {
$argc = func_num_args();
for ($i = 0; $i < $argc; $i++) {
$arg = func_get_arg($i);
if (! is_null($arg)) {
return $arg;
}
}
return null;
}
$a = pick($b, $c, $d);
?>
mw atto lanfear dotto com
07-Dec-2004 02:56
func_get_arg() does not appear to be allowed to be used as a function argument itself within class constructors in PHP 5.0.2 (wonk-ay!!!):
<?php
class ABC
{
function __construct()
{
foreach (func_get_args() as $name => $value)
{
echo <<<EOT
<br/>
$name : $value <br/>
<br/>
EOT;
}
}
}
class DEF extends ABC
{
function __construct()
{
parent::__construct(func_get_arg(0),
func_get_arg(1),
func_get_arg(2));
}
}
$def = new DEF(123123, "asdfasdf", "blahblahblah");
?>
The above script generates:
Fatal error: func_get_arg(): Can't be used as a function parameter in c:\Inetpub\wwwroot\phpwasrc\chapter10\xxx.php on line 23
There are, however, no problems when passing these as parameters to regular functions.
dvogel at ssc dot wisc dot edu
21-Oct-2004 02:54
I've always wants a deferment or cascade operator so that I could use this expression:
$a = $b ## $c ## $d;
and everything to the right of the assignment operator would evaluate to the left-most value that is not null. It is essentially a collapsed version of this:
if ($b) {
$a=$b;
} else {
if($c) {
$a=$c;
} else {
if ($d) {
$a = $d;
} else {
$a = null;
}
}
}
In leiu of this, I'm trying to make a function that takes a variable number of arguments and returns the first that is not null. I wan't to use this on some large-ish arrays, so I'd like to pass these by reference. However, call-time reference passing is disabled (and should be, imo) in newer versions of PHP. I'd like suggestions on how to pass both references and values to this function.
The only solution I can think of is setting variables to the reference of the array first. e.g.
$a = array( ... );
$b = 0;
$c = &a;
first_not_null($a, $b);
Does anyone know a better solution?
harald at triptop dot org
14-Sep-2004 03:09
func_get_arg is useful, if you know the exact order of the arguments, or if the order doesn't matter. i use this function (or func_get_args) for example to create own sprintf wrappers.
if you want to pass a variable number of arguments to a function it's in my opinion better, to submit it as a key/value array e.g.:
<?php
functioncall(array("param1" => "...",...));
?>
and 'extract' the array inside the function. you don't need to do tricks like type-checking for parameter-recognition, in this case.
anders at ingemann dot fakestuff dot de
03-Jun-2004 06:16
I actually think that there is need for such "do absolutely everything" functions. I use them mostly as tools for rapid prototyping.
And there is a method with which you may be able to pass several strings to a function: ereg();
Another use for such functions is to create little code snippets for other people out there. They won't have to edit the function any longer if they do not use a parameter. They just don't name it when calling the function.
This results in allrounder functions that are very robust in their use.Normally you just have a little code snippet (e.g. ip-blocking snippets). Through this type of programming you have whole functions.
26-May-2004 09:29
very clever unless you need to specify at least two parameters of the same type - which is which? Obviously, you may decide on some defaults, but then the whole thing gets ugly. What if you need a string ONLY if a boolean was also supplied? The type-checking becomes the main focus of your function, shit. For the sake of clean code you should specify a clean interface to your functions, and decide on what and where is passed as an argument. Yes, you can always code a do_absolutely_everything() function, but is there any sense?
anders at ingemann dot fakestuff dot de
29-Apr-2004 04:18
A pretty cool thing for user defined functions is only to submit the needed parameters. If you call a function that has three optional parameters you have to define the two first ones (even if they should stay like the defined standard in the function) before your are able to tell the function what the third important parameter is. Instead you might as well just find out by the pattern or the type of the submitted parameter which variable it should be assigned to.
like this:
<?
function whatever()
{
for($i=0;$i<func_num_args();$i++)
{
if(is_bool(func_get_arg($i))) $log_ip=func_get_arg($i);
if(is_int(func_get_arg($i))) $limit=func_get_arg($i);
if(is_string(func_get_arg($i))) $name=func_get_arg($i);
}
}
?>
Now you can call the function with any parameter you want.
e.g.:
<? whatever(3600); ?>
in that case $limit would be defined with 3600.
It doesn't matter if you do this:
<? whatever(3600,false); ?>
or this:
<? whatever(3600,"blaaah"); ?>
or this:
<? whatever("blaaah",true,3600); ?>
You may also use ereg(). Through that you're able to use more than one parameter as a string.
hmm probably ereg() is the best solution...
never mind.
just check it out ;-)
mightye (at) mightye (dot) org
12-Mar-2004 09:45
func_get_arg() returns a *copy* of the argument, to my knowledge there is no way to retrieve references to a variable number of arguments.
I have a module system in my game at http://lotgd.net where I'd like to be able to pass a variable number of arguments to functions in a module, and pass them by reference if the module asks for it by reference, but you can't accept optional parameters as references, nor can you retrieve the reference on a variable number of arguments. Looks like my modules will have to do with out the ability to accept parameters to their functions by reference.
martin at classaxe dot com
07-Jun-2002 10:55
This function whilst elegant doesn't in itself avoid the problem of generating warning messages where variables are not set, unless of course you switched warnings off:
error_reporting(E_ERROR);
The answer for those of who like to see necessary warnings?
Call it like this:
@allSet($w, $x, $y, $z)
(Martin Francis)
| |
| | Citas célebres | Si pudiera vivir de nuevo, intentaría cometer más fallos. Me relajaría. Subiría a más montañas y nadaría en más ríos. Cogería más margaritas. Tendría más problemas reales y menos imaginarios. Don Herold Humorista estadounidense (1889-1996) | | Citas en tu mail | | ©Contenidos Gratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|