Portál AbcLinuxu, 27. dubna 2024 04:10


Dotaz: volání metody v jiné třídě

11.1.2016 12:59 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
volání metody v jiné třídě
Přečteno: 327×
Odpovědět | Admin
Dobrý den

řeším takový problémek, snad ho popíšu srozumitelně ..

mám dvě nazávislé třídy, jedna definuje (modifikuje) chování druhé pro pozdejsi pouziti ...
class vytvor {

  function __constructor( funkce ){
    this->_funkce = funkce;
  }

  function udelej(a){
    return $this->funkce( a );
  }
}


class poroucej {
  
  function na_druhou(a){
    return a*a;
  }

  function zaloz( $funkce ) {
    this->robot = new vytvor( $this->{$funkce} );
  }

  function zpracuj( array $data ){
    foreach( $data as $udaj ){
      $this->robot->udelej( $udaj );
    }
  }
}

$udaje = array( 2, 5, 30, 25 );
$hlavni= new poroucej( "na_druhou" );
echo $hlavni->zpracuj( $udaje );
je to jen nástin, snad pochopitelny ... jde mi o to, zda lze předat funkci ( nebo tady metodu ) jako parametr, která se de fakto stane metodou jiné třídy.

předem díky ..

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.1.2016 13:39 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: volání metody v jiné třídě
Odpovědět | | Sbalit | Link | Blokovat | Admin
Teď si uvědomuji, že ten nadpis je nepřesný .. jde o předání odkazu na metodu v jiné třídě
11.1.2016 14:22 Radek
Rozbalit Rozbalit vše Re: volání metody v jiné třídě
skus hleada "pointer to function php"

http://stackoverflow.com/questions/6475136/pass-a-function-by-reference-in-php
http://stackoverflow.com/questions/12690820/how-to-pass-a-pointer-to-a-function-and-its-parameters-in-php

function doIt ($fn) {
echo "doIt\n";
return $fn();
}

function doMe () {
echo "doMe\n";
}

// I am using a closure here.
// There may be a more clever way to "get the function-object" representing a given
// named function, but I do not know what it is. Again, I *don't use PHP* :-) (nepoužívá PHP)
echo doIt(function () { doMe(); });

Kód je okopírován z jednoho odkazu výše

Princip je jednoduchý funkce je uložená někde v pamětí, tedy je uložená na nějaké adrese. Tuto adresu si ulož do proměnné, a následně tuto proměnou můžeš volat jako funkci. (pokud má proměnná správný typ). (pro přetypování hledej retyping php)
11.1.2016 14:27 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: volání metody v jiné třídě
správně by mělo být echo doIt( 'doMe' };

mně šlo ale o předání 'pointeru' na metodu v objektu .. viz níže ..

každopádně děkuji za snahu
Řešení 1× (Milan Uhrák (tazatel))
11.1.2016 14:22 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: volání metody v jiné třídě
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak nic, když jsem správně pojmenoval problém, našel jsem i řešení

volání má být this->robot = new vytvor( array($this, $funkce} );

a udelej musi byt ošetřeno
  function udelej(a){
    $funkce = $this->$funkce;
    return $funkce[0]->$funkce[1]( a );
  }
plus nějaké to odchycení chyb ..

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.