Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Uso di GLOBAL

  1. #1

    Uso di GLOBAL

    Considerate il mio esempio:

    Codice PHP:
    session_start();

    $stringa 'prova';
    $globale 'pippo';

    function 
    scope_test $text_to_show='empty'$text_to_concat ) {
        
        global 
    $globale;
        
    $text_to_concat $globale;
        return 
    $text_to_show ' ' $text_to_concat;
    }

    echo 
    scope_test ($stringa); // expected: prova pippo 
    Effettivamente viene stampato a video "prova pippo", ma (giustamente) viene lanciato anche un WARNING

    codice:
    Warning: Missing argument 2 for scope_test(), called in [...]
    Vorrei far sparire il WARNING mettendo come default a $text_to_concat una variabile globale. È possibile?
    Ho già provato diverse soluzioni senza successo. Per esempio

    Codice PHP:
    <?php

    session_start
    ();

    $stringa 'prova';
    $GLOBALS['globale'] = 'pippo';

    function 
    scope_test $text_to_show$text_to_concat=$GLOBALS['globale'] ) { // line 10
        
    return $text_to_show ' ' $text_to_concat;
    }

    echo 
    scope_test ($stringa); // expected: prova pippo
    E il risultato è

    codice:
    Parse error: syntax error, unexpected T_VARIABLE in [...] on line 10
    Insomma, quando si richiama una funzione si può evitare di specificare il secondo argomento avendo come default una superglobale (quindi anche ad esempio $_SESSION, $_COOKIE) ? O non è possibile?

    Grazie per l'eventuale risposta.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    No , non puoi per il semplice motivo che i valori degli argomenti di default devono essere espressioni costanti.

    Un workaround può essere:
    Codice PHP:
    function Pippo($arg=null){
        if(
    is_null($arg))
            if(isset(
    $GLOBALS['PippoArg']))
                
    $arg2=$GLOBALS['PippoArg'];
            else
                
    trigger_error("Impossibile inizializzare il secondo argomento in Pippo");

        
    //resto della funzione

    Comunque non è mai una buona cosa creare una simile dipendeza. Se proprio devi utilizzare una variabile globale passala alla funzione nel momento in cui la richiami.

    Codice PHP:
    Pippo($PippoArg); 
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Assolutamente daccordo, evitare come la pesta l'uso delle globals e' sempre cosa buona et giusta !!!

    ANche perche' rumors che paiono confermati cmq, dicono che non saranno piu' disponbili, molti servers stanno gia rimuovendo iul supporto delle globals ( tante tante tante tante saracche a sistemare vecchi app fatte tutte con le globas da diosolosachi) .....

    Sconsiglio vivamente pure io questo approccio.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da Virus_101
    Assolutamente daccordo, evitare come la pesta l'uso delle globals e' sempre cosa buona et giusta !!!

    ANche perche' rumors che paiono confermati cmq, dicono che non saranno piu' disponbili, molti servers stanno gia rimuovendo iul supporto delle globals ( tante tante tante tante saracche a sistemare vecchi app fatte tutte con le globas da diosolosachi) .....

    Sconsiglio vivamente pure io questo approccio.
    Php 6 incoming...

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Eh magari....
    Purtroppo non e' cosi' prossima la cosa.
    Per il momento deve arrivare la versione 5.4 che gia' di suo porrà parecchi paletti e introdurrà molte feature OOP (come interfaccie per sessioni custom etc... )

    Io spero e prego che aggiungano la gestione delle persistenze... oggi come oggi e' assolutamente necessaria, soprattutto se usi molto il pattern factory ... che per web apps e' un pattern moooooooooooooolto comodo
    Già PDO fornisce un layer per gestione peristenze dell'oggetto database, chissà che facciano anche il next step cosi' finalmente potremo fare applicazioni con core engine riutilizzabile dai moduli invocati che non necessiti una re-instanziazione ogni volta che viene chiamato 1 script...

    Vabb scusate il piccolo OT ... ma io e' da tanto che aspeto questa cosa... in java c'e' da 1 vita

  6. #6

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Np

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.