Reklama na webu iskolky.cz / PR články / bannery/ textové odkazy / slevy 50% do konce srpna
Zobrazují se odpovědi 1 až 12 z 12

Funkce s více argumenty předávanými byref

  1. Zdravím.
    Napadlo mě napsat si "makro"/funkci, která mi zkrátí zápis, např.

    PHP kód:
    if (isset($_GET['kategorie']) || isset($_GET['produkt']) || isset($_GET['nastaveni']) || isset($_SESSION['uzivatel']) || isset($_GET['stranka'])) {
       ...

    na
    PHP kód:
    if (anyset($_GET['kategorie'], $_GET['produkty'], $_GET['nastaveni'], $_SESSION['uzivatel'], $_GET['stranka'])) {
        ...

    Pro jeden argument by hlavička této funkce byla
    PHP kód:
    function anyset(&$variable) {
        return isset(
    $variable);

    Já bych ji chtěl rozšířit na libovolný počet parametrů.
    Zkoušel jsem:
    * func_get_args() - hodí Notice: Undefined index
    * func_get_arg() - použít s isset() nejde
    * anyset(...$variables) - hodí Notice: Undefined index
    * anyset(...&$varibles) - není povoleno
    Zná někdo řešení?

    Díky

  2. Co se právě děje na Webtrhu?
  3. Dej to tam jako pole na vstupu.

  4. array_intersect_key($_GET, array_fill_keys(['kategorie'], null))

  5. Citace Původně odeslal musil.david Zobrazit příspěvek
    Dej to tam jako pole na vstupu.
    Sorry - vůbec nerozumím. Co znamená "to" a "tam"?
    Pokud jsi si jistý, že tvá rada funguje, šlo by odpovědět přímo příkladem kódu?

    Citace Původně odeslal node Zobrazit příspěvek
    array_intersect_key($_GET, array_fill_keys(['kategorie'], null))
    Tvůj kód:
    * dělá úplně něco jiného, než potřebuju (nepotřebuju vyplňovat nedefinované proměnné, ale testovat jejich existenci)
    * pro nedefinované proměnné stejně hodí "Notice: undefined index"
    * nefunguje pro můj zadaný příklad, kde používám více polí

    ----
    Nechci být hrubý a cením si, že mi odpovídáte, ale příště prosím jen odpovědi, které mají větší než nulovou informační hodnotu a nemrhají časem. Díky

  6. Casem si mrhas ty sam, protoze vymyslis znovu kolo :) Ale chapu, asi zacinas, tak to chces polopate...

    Mas promennou $_GET, ve ktere muze byt treba deset klicu. Tebe zajimaji pro danou operaci treba jen tri z nich a tak je chces otestovat svou funkci.

    Kód:
    $keys = array('kategorie', 'produkt', 'stranka'); //tyto klice te nyni zajimaji
    
    if (anyset($keys) === TRUE)) {
      //tvuj dalsi kod
    }
    
    function anyset($keys) {
        foreach ($keys as $key) {
            if (isset($_GET[$key]) === FALSE) {
                return FALSE;
            }
        }
    
        return TRUE;
    }
    Samozrejme se da doplnit spousta osetreni, jako treba filter_input(), ale vzhledem k tomu, ze nepouzivas framework a jen nejake vlastni easy custom reseni, tak to asi uplne nepotrebujes.

  7. Jelikož crs nechce pouze $_GET, nebylo by použitelnější něco takového?

    Kód:
    function anyset() {
    	foreach(func_get_args() as $arg) if(isset($arg)) return true;
    	return false;
    }
    Vypadá to, že hledá něco, co mu zobrazí, jestli alespoň 1 z arg existuje, tzn. pokud najdu první existující, vrátím true, jinak pokračuju a pokud nenajdu, vrátím false.. Může být použito jak na ten $_GET, $_SESSION, tak cokoliv..

    Možné použití (bez zobrazování errorů) by bylo např.

    Kód:
    $result = @anyset($_SESSION["username"], $_GET["kategorie"], $_GET["cokoliv"]);

  8. Citace Původně odeslal musil.david Zobrazit příspěvek
    Casem si mrhas ty sam, protoze vymyslis znovu kolo :) Ale chapu, asi zacinas, tak to chces polopate...
    Zdravím, Davide. Jak jsem již psal v příkladu a jak napsal Jiří Mrázek, chci tu funkci testovat i na jiné proměnné než z pole $_GET (a nemusejí to být nutně indexy pole). Je to v mém příkladu v mém prvním příspěvku jasně napsané; netušil jsem, že to někdo tak snadno přehlédne. Proto všechno, co jsi zde zatím napsal, je nepoužitelné a není to k tématu. A proto si troufám tvrdit, že mrháš mým časem.

    Citace Původně odeslal Jiří Mrázek Zobrazit příspěvek
    …nebylo by použitelnější něco takového?
    Taky díky za odpověď, ale jak jsem psal, func_get_args() jsem zkoušel a hází Notice: Undefined index.
    Ohledně @ na potlačení chyby, ok, to jsem nezmínil tak zmiňuju teď – chci řešení bez @.
    ----
    Zná tedy někdo řešení? Existuje vůbec?

  9. Dle mého lepší řešení asi nebude, jelikož nemůžeš předat něco, co neexistuje... A když předáš, tak to bohužel vypíše ten error... Jedině vypnout errory a použít verzi bez @...

  10. Kód:
    test($_GET['kategorie'],$_SESSION['uzivatel'], $_GET['produkty']);
    
    function test(&...$params) {
      foreach($params as $param){
        if(isset($param)){return true;}
      }
      return false;
    }
    Naposledy upravil rkor : 14.07.2018 v 09:43

  11. Tve ego musi byt opravdu nekde u oblak. Vzdy me pobavi tento pristup ;-) A jeste ty reci, jak plytvam tvym casem.

    Ve svem prikladu mas jen glob promenne jako GET a SESSION, tak nerikej, ze jsi napsal neco jasne. Navic je tak jednoduche to predelat. Udelal jsem ti muster, klidne si to rozsir jeste treba o POST a normalni promenne, vzdyt je to jednoduche. Nehazi to zadne errory, funguje to presne jak chces.

    PHP kód:
    $keysGET = array('kategorie''produkt''stranka');
    $keysPOST = array('jmeno''vek');
    $otherVars = array($var1$var2);

    if (
    anyset($keysGET$keysPOST$otherVars) === TRUE)) {
      
    //tvuj dalsi kod
    }

    function 
    anyset($keysGET$keysPOST$otherVars) {
        foreach (
    $keysGET as $key) {
            if (isset(
    $_GET[$key]) === FALSE) {
                return 
    FALSE;
            }
        }

        foreach (
    $keysPOST as $key) {
            if (isset(
    $_POST[$key]) === FALSE) {
                return 
    FALSE;
            }
        }

        foreach (
    $otherVars as $var) {
            if (isset(
    $var) === FALSE) {
                return 
    FALSE;
            }
        }

        return 
    TRUE;

    To by me zajimalo, cim mi umyjes prdel tentokrat a co zase budes kritizovat. Mozna tim, ze tam nemam SESSION? :)) Vahal jsem, zda ti jen tam pridelat, ale ber to jako bojovku a domaci ukol ;-)

    Tohle reseni vyse mas pro pripad &&. Ve svem prikladu mas ||, takze staci predelat logicka vyhodnoceni opacne, napr.

    PHP kód:
        foreach ($keysPOST as $key) {
            if (isset(
    $_POST[$key]) === TRUE) {
                return 
    TRUE;
            }
        } 
    apod.

    Dovedu si predstavit realne pouziti takove funkce s &&. Ale s || opravdu moc ne.
    Naposledy upravil musil.david : 14.07.2018 v 02:53

  12. Citace Původně odeslal rkor Zobrazit příspěvek
    Kód:
    test($_GET['kategorie'],$_SESSION['uzivatel'], $_GET['produkty']);
    
    function test(&...$params) {
      foreach($params as $param){
        if(isset($param){return true;}
      }
      return false;
    }
    Moc pekne :)! Ale neni tohle mozne az od nejake verze phpka?

  13. Citace Původně odeslal musil.david Zobrazit příspěvek
    Moc pekne :)! Ale neni tohle mozne az od nejake verze phpka?
    5.6+

Hostujeme u Server powered by TELE3