| From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> | 
|---|---|
| To: | Mario Gonzalez <gonzalemario(at)gmail(dot)com> | 
| Cc: | Jaime Casanova <systemguards(at)gmail(dot)com>, Nicolas Sorich <nsorich(at)udec(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Re: " campo con apostrofe" | 
| Date: | 2005-11-30 15:24:32 | 
| Message-ID: | 20051130152432.GB13240@surnet.cl | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Mario Gonzalez escribió:
> On 30/11/05, Jaime Casanova <systemguards(at)gmail(dot)com> wrote:
>   Solamente porque no se lee o se quieren hacer las cosas mas
> "faciles", por algo a PHP se le atribuye que es malo. Porque es tan
> facil que los supuestos programadores hacen codigos con bugs y que no
> se pueden leer facilmente.
Bueno, en verdad PHP es un lenguaje malo.  Un ejemplo trivial: imagina
que tienes un array $_TD que tiene un atributo 'new' el cual a su vez
tiene un atributo 'campo'.  Tu puedes acceder a este ultimo atributo
usando esto:
$_TD['new']['campo']
Pero dentro de un string no puedes usar un constructo complejo como ese,
o sea no puedes hacer esto:
"este es el campo de new: $_TD['new']['campo']"
Lo que tienes que hacer es encerrar el nombre de la variable en {}.  O
sea para acceder a $_TD['new'] tu puedes hacer esto:
"este es new: ${_TD['new']}"
y funciona perfectamente.  Nice eh?  Sin embargo si quieres acceder al
campo:
"este es campo: ${_TD['new']['campo']}"
esto ya no funciona.  Por que?  No tengo idea, es un bug en PHP.  Un bug
que me hace desconfiar totalmente del constructo ${} en PHP y por lo
tanto prefiero usar otros mecanismos como sprintf() o simplemente
asignar a otra variable -- o derechamente usar otro lenguaje ;-)
Esto no es un ejemplo hipotetico ni inventado.  Lo he sacado directo de
los tests de regresion de PL/php, donde se hace una prueba de triggers
examinando el 'new' (que es como el NEW de PL/pgSQL).
CREATE FUNCTION trigfunc() RETURNS trigger LANGUAGE plphp AS $$
        $extra = "";
        if ($_TD['level'] == 'ROW') {
                if ($_TD['event'] == 'DELETE' || $_TD['event'] == 'UPDATE') {
                        $extra .= " old val: ". $_TD['old']['a'];
                }
                if ($_TD['event'] == 'INSERT' || $_TD['event'] == 'UPDATE') {
                        $extra .= " new val: ". $_TD['new']['a'];
                }
        }
        pg_raise('notice', "trigger: ${_TD['name']} table: ${_TD['relname']}, ".
                 "level: ${_TD['level']} event: ${_TD['when']} ${_TD['event']}$extra");
$$;
-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Alvaro Herrera | 2005-11-30 15:27:09 | Re: " campo con apostrofe" | 
| Previous Message | Jaime Casanova | 2005-11-30 14:38:38 | Re: formato fecha |