Visualizzazione risultati 1 fino 8 di 8

Discussione: Utilizzare funzione php che contiene solo uno switch di costanti

  1. #1
    Guest

    Predefinito Utilizzare funzione php che contiene solo uno switch di costanti

    Ragazzi, mi faccio pena da solo

    Era da moltissimo tempo che non utilizzavo le funzioni create da me, dato che lavoro solo con un CMS, utilizzavo quelle ma mi sono trovato in una situazione un pò imbarazzante

    Allora, io ho questa funzione:
    Codice PHP:
    function control_type($row)
    {
    global
    $db, $board_config, $lang;

    switch(
    $row)
    {
    case
    CHALLENGE_TYPE_SIGNATURE:
    $challenge_type = 'Signature';
    break;

    case
    CHALLENGE_TYPE_ICON:
    $challenge_type = 'Icon';
    break;

    case
    CHALLENGE_TYPE_REMAKE:
    $challenge_type = 'Remake';
    break;

    case
    CHALLENGE_TYPE_COLORIZE:
    $challenge_type = 'Colorize';
    break;

    case
    CHALLENGE_TYPE_FREE:
    $challenge_type = 'A Piacere';
    break;
    }

    return
    $challenge_type;
    }
    Poi ho questo codice:

    Codice PHP:

    include(IP_ROOT_PATH . 'includes/functions_challenge.' . PHP_EXT);

    define('CHALLENGE_TYPE_FREE', 0);
    define('CHALLENGE_TYPE_ICON', 1);
    define('CHALLENGE_TYPE_REMAKE', 2);
    define('CHALLENGE_TYPE_COLORIZE', 3);
    define('CHALLENGE_TYPE_SIGNATURE', 4);

    $sql = 'SELECT challenge_votes_table.id_user, challenge_table.*
    FROM '
    . CHALLENGE_VOTES_TABLE . ' AS challenge_votes_table
    JOIN '
    . CHALLENGE_TABLE . ' AS challenge_table
    WHERE challenge_table.id = '
    . $id_challenge . '
    AND challenge_votes_table.id_user = '
    . $userdata['user_id'];

    if (!(
    $result = $db->sql_query($sql)))
    {
    message_die(GENERAL_ERROR, 'Could not read id challenge.', '', __LINE__, __FILE__, $sql);
    }
    $row = $db->sql_fetchrow($result);

    control_type($row['type_challenge']);
    In poche parole, per non scrivermi ogni volta lo switch, vorrei crearmi una funzione che controlla lo stato e me lo restituisce.

    Però non so due cose:


    1. Faccio bene a fare così? Cioè, le costanti, dovrei definirle nella funzione, oppure prima di includere il file, oppure dovrei eseguire la query anche nella funzione in modo da avere il risultato nella funzione e confrontarlo nello switch?
    2. Come posso recuperare il valore della funzione? Cioè, dopo che scrivo:
      Codice PHP:
      control_type($row['type_challenge']);
      Come posso fare ad avere il risultato in una variabile da poter utilizzare7stampare in futuro?

    Grazie in anticipo delle risposte

  2. #2
    Guest

    Predefinito

    Va bene anche così.
    Comunque per ottenere il risultato basta fare
    Codice PHP:
    $valore_di_ritorno = funzione($paramentro);
    in $valore_di_ritorno c'è il valore restituito dalla variabile.

  3. #3
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    le costanti, dovrei definirle nella funzione, oppure prima di includere il file
    Le costanti devi definirle prima che la funzione venga invocata, in qualsiasi punto.
    Io ti suggerisco di inserirne la dichiarazione in un file da includere in ogni script che faccia uso di quella funzione.
    Se quel functions_challenge.php viene incluso globalmente puoi pure inserire all'interno di quello la dichiarazione delle costanti, e magari anche il corpo della funzione (ipotizzando, dal nome del file, che contenga le varie procedure da sfruttare).
    oppure dovrei eseguire la query anche nella funzione in modo da avere il risultato nella funzione e confrontarlo nello switch?
    Questo sarebbe inutile.
    Il primo e unico parametro formale della procedura accetta un valore numerico, poi utilizzato nello switch.
    Quando richiami la funzione, passi direttamente il valore estratto dal database tramite la query nel programma chiamante, quindi il numero che ti serve ce l'hai già.
    Come posso recuperare il valore della funzione?
    Codice PHP:
    $variabile = control_type($row['type_challenge']);
    Dopo il listato sopra sopra $variabile conterrà una stringa tra "Signature","Icon","Remake","Colorize" e "A Piacere", a seconda del valore di $row['type_challenge'] passato alla funzione.
    Come posso stampare il valore della funzione?
    Codice PHP:
    echo control_type($row['type_challenge']);
    Spero di averti chiarito un'pò le idee sulle funzioni e il loro funzionamento ;)

    Poi una curiosità: come mai nella dichiarazione della funzione includi quel:
    Codice PHP:
    global $db, $board_config, $lang;
    ?
    E' superfluo, visto che quelle variabili non sono mai utilizzate nella procedura.
    Ciao!
    Ultima modifica di programmazioned : 11-04-2009 alle ore 00.14.01

  4. #4
    Guest

    Predefinito

    Ringrazio infinitamente tutti e due, avevo la soluzione sotto il naso, banalissima, non ci ho pensato minimamente, ma sapete, sto srciendomi tutto da solo e vedo codice da tutte le parti e e le cose più banali non mi vengono in mente

    Ho defnito quelle variabili globali perchè ora ho modificato lo script, ma mi servirà solo $lang, per le frasi da mostrare in base alla lingua.

    Ora ho una domanda, sempre relativo alle funzioni e al loro utilizzo.

    Ho una sintassi ismile a quella di prima:
    Codice PHP:
    function control_state($row)
    {
    global
    $lang;

    define('CHALLENGE_STATE_WAIT', 0);
    define('CHALLENGE_STATE_WAIT_IMAGES', 1);
    define('CHALLENGE_STATE_OPEN', 2);
    define('CHALLENGE_STATE_RIFIUTED', 3);
    define('CHALLENGE_STATE_LOCKED', 4);
    define('CHALLENGE_STATE_CLOSED_PARITY', 5);
    define('CHALLENGE_STATE_ANNULLED', 6);

    switch(
    $row)
    {
    case
    CHALLENGE_STATE_WAIT:
    $challenge_state = 'In Attesa di Risposta';
    $image_status = $images['icon_challenge_status_send'];
    break;

    case
    CHALLENGE_STATE_WAIT_IMAGES:
    $challenge_state = 'In Attesa delle immagini.';
    $image_status = $images['icon_challenge_status_open'];
    break;

    case
    CHALLENGE_STATE_OPEN:
    $challenge_state = 'In Votazione';
    $image_status = $images['icon_challenge_status_open'];
    break;

    case
    CHALLENGE_STATE_RIFIUTED:
    $challenge_state = 'Rifiutata';
    $image_status = $images['icon_challenge_status_rifiuted'];
    $message = 'La sfida è stata rifiutata.';
    break;

    case
    CHALLENGE_STATE_LOCKED:
    $challenge_state = 'Chiusa';
    $image_status = $images['icon_challenge_status_closed'];
    $message = 'La sfida è chiusa.';
    break;

    case
    CHALLENGE_STATE_CLOSED_PARITY:
    $challenge_state = 'Chiusa in Parità';
    $image_status = $images['icon_challenge_status_parity'];
    $message = 'La sfida è finita in parità.';
    break;

    case
    CHALLENGE_STATE_ANNULLED:
    $challenge_state = 'Annullata';
    $image_status = $images['icon_challenge_status_annulled'];
    $message = 'La sfida è stata annullata.';
    break;
    }
    }
    Come posso fare a scegliere cosa mostrare delle tre variabili?

  5. #5
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Ringrazio infinitamente tutti e due, avevo la soluzione sotto il naso, banalissima, non ci ho pensato minimamente, ma sapete, sto srciendomi tutto da solo e vedo codice da tutte le parti e e le cose più banali non mi vengono in mente
    Il chè è un'ottima cosa

    Comunque, sbaglio o ti piacciono particolarmente le costanti?
    Btw, ti consiglio di limitarne l'utilizzo specialmente quando non indispensabile, essendo queste notevolmente pesanti rischiano di rallentare l'esecuzione dello script.

    [esistevano gli enumeratori in php? Non mi ricordo... ]

    Per rispondere alla tua domanda, la parola chiave return indica il valore di ritorno della funzione.
    Ciò significa che ad esempio:
    Codice PHP:
    return $image_status;
    ritornerà al programma chiamante il valore di $image_status.
    Ciao!
    Ultima modifica di programmazioned : 11-04-2009 alle ore 00.49.34

  6. #6
    Guest

    Predefinito

    Uso le costanti (quando potrei usare variabili forse) per definire un valore generale, appunto una costante, così modifico soolo in una parte e cambia tutto lo script

    Si, lo so quello, però come vedi ho due/tre variabili definite nel case #:, quindi come posso prendere, per esempio, la variabile $image_status e la $message in modo da riutilizzarla nello script?

    Grazie ancora

  7. #7
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Fai tornare alla funzione una struttura di dati (magari un hash table come nell'esempio sotto) che contiene quanto ti serve.
    Codice PHP:
    return array('message'=>$message, 'imageStatus'=>$image_status);
    .
    Codice PHP:
    $var = funzione($argomento);
    echo
    $var['message'];
    Ciao!
    Ultima modifica di programmazioned : 11-04-2009 alle ore 01.51.11

  8. #8
    Guest

    Predefinito

    Perfetto, grazie a voi, ho risolto anche questo problema.

    Grazie ancora infinitamente, forse è meglio andare a letto ora


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •