Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Curiosità ed efficienza

    Ho un elenco di domande da farvi,
    spero tanto che possiate risolvere i miei dubbi.

    1) Quando in un file A io includo un file B, e questo file mi include un'altro file C ricevo messaggio di errore che mi dice che C non è stato trovato.
    Questo non accade se cerco il file C come se fossi nella cartella di A e non di B.
    Perchè succede questo?

    2) Per confortare due stringhe ho sempre usato strcmp.
    Ma che differenza c'è tra if ( str1 == str2) e if( strcmp(str1,str2) == 0 ) ?
    Ad esempio chi è il più efficiente e/o il più [u]sicuro[/b] nell'esecuzione ?
    Inoltre quando andiamo a fare:
    switch(stringa){
    case "prova1": ... break;
    case "prova2": ... break;
    default : ... break;
    }

    Il case come confronta le varie stringhe? Con strcmp o con un uguaglianza?

    3) Se prendo un campo ENUM o SET da un database, questa mi viene vista come una stringa, ma in verità è più simile a dare dei nomi a degli interi (quindi possiamo vederle come delle define). Il php riesce a capire questa distinzione, oppure le vede solo come stringhe?
    Ad esempio dato:
    ENUM = 'uno', 'due', ... , 'dieci'
    ed estratto questo campo tramite mysql in una variabile X
    è possibile risalire immediatamente alla posizione registrata dentro ENUM di X
    ad esempio se X == "sette", risalire subito a 7 senza implementare una apposita funzione?

    Grazie del vostro aiuto

  2. #2
    1) perchè se specifichi path relative, è da A che devi partire visto che è A che carica... se vuoi che C sia caricato correttamente in relazione a B, da B devi richiamare C usando una path assoluta tipo

    Codice PHP:
    //in B.php
    require dirname(__FILE__) . DIRECTORY_SEPARATOR 'C.php'
    http://php.net/manual/en/function.dirname.php (esempio utenti 1)

    2)

    come da link http://php.net/manual/en/language.op...comparison.php l'uso di == ti assicura che le stringhe siano uguali. Purtroppo non ho idea di come faccia il test

    strcmp, come leggi sempre qui, http://it.php.net/manual/en/function.strcmp.php fà sicuramente un controllo binario delle due stringhe, e ritorna più informazioni di ==, cioè ti dice se sono uguali o quale delle due è più grande dell'altra

    immagino che ==,>,< applicate ad una stringa diano gli stessi risultati di strcmp, ma non ne sono sicuro (ad eccezzione che <,> tornano un boolean, e strcmp torna un intero)

    come suggerisce il nome, strcmp è la tua soluzione se devi fare il sort di stringhe

    quale dei due sia più efficiente non saprei, dovresti analizzare l'implementazione per capirlo...puoi divertirti a fare dei test (possibilmente con un numero consistente di stringhe da comparare) e vede con quale metodo l'algoritmo ci mette di meno, ma credo che sia una differenza minima e irrilevante.

    Lo switch penso che segua la logica dell'==

    3) No php non supporta enum, puoi vedere qui per un'idea alternativa:

    http://stackoverflow.com/questions/254514/php-and-enums

    http://stackoverflow.com/questions/3...ructs-or-enums

    Poi che cosa legga php dal db non ne ho idea, immagino il valore dell'enum, ma non so, mai usato enum in un db...

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Wow sei un mito Santino83_02, mi hai aiutato davvero molto.
    Grazie

    Solo una cosa non mi è chiara.
    Se nel file B devo includere il file C, usando il path assoluto, allora leggo il path di B.
    Ma poi come mi sposto nel path di C (che si trova in un'altra cartella).

    Es:
    Cartella A -> contiene file A, Cartella B e Cartella C
    Cartella B -> contiene file B
    Cartella C -> contiene file C

    Quindi dal file B mi ricavo il path assoluto... ma poi non mi posso spostare con "../Cartella C" perchè sto usando appunto l'assoluto.

    Quindi come fare?

  4. #4
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    In B.php metti uno di questi:

    require __DIR__ . '/../C/C.php';
    require realpath(__DIR__ . '/../C/C.php');
    require realpath(dirname(__FILE__) . '/../C/C.php');

    ... come vedi hai ampia scelta! Quando tu ricavi il path assoluto di B in B.php, basta che da questo ti sposti uno dietro (quindi stai in A) e poi vai avanti (quindi vai a prendere C.php in C).
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  5. #5
    come dice Secta, una volta che sai da dove partire (path assoluto di B.php) basta che ti muovi sulla path come faresti navigando in una shell linux
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    grazie a tutti
    siete fantastici

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.