Portál AbcLinuxu, 24. dubna 2024 11:34


Dotaz: Problém s class v php

1.10.2013 11:41 Jara
Problém s class v php
Přečteno: 266×
Odpovědět | Admin
Ahoj, mám takovou slátaninu
class Foo { 
 public $aaa = false; 
 public $bbb = false; 
 function __constructor() { 
...
...
 } 
} 
$foo = new Foo;
echo $foo->aaa(); // ale false prostě nedostanu :-(
Neporadí někdo? 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

Josef Kufner avatar 1.10.2013 11:44 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s class v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na posledním řádku voláš metodu, která není definována. Měl bys dostat nějaký pěkný error nebo aspoň warning. Pokud ne, zapni logování.

Poslední řádek má být: echo $foo->aaa;, ale uvidíš prd, neboť z false vyleze prázdný řetězec. Zkus var_export($foo->aaa);.
Hello world ! Segmentation fault (core dumped)
1.10.2013 12:02 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Jejda já jsem ale idiot, nn měl jsem to přes var_dump($foo->aaa()); ale blbě, volal jsem metodu, měl bych jít už vážně spát.. Když tady mám ochotného profíka co mi poradil, můžu poprosit o jedno řešení? Nevím jak mám v class vracet výsledek z jedné metody do různých proměnných. Dejme tomu, že z nějaké metody zavolám metodu foo() a její výsledek potřebuji uložit do proměnné $this->foo; Jenže potřebuji zase z jiné metody zavolat opět metodu foo() která již bude zpracovávat jiná data ale výsledek potřebuji uložit do proměnné $this->bar; Poradíte mi prosím? Díky
Tarmaq avatar 1.10.2013 12:19 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s class v php
nevim moc o co se pokousis, kazdopadne jestli to chapu spravne, melo by to jit nejak takhle:
class Omg
{
  private $foo;
  private $bar;

  private function foo($omg)
  {
    if ($omg) {
      return 42;
    }
    return 23;
  }
  function method1()
  {
    $this->foo = $this->foo(true);
  }
  function method2()
  {
    $this->bar = $this->foo(false);
  }
}

$omg = new Omg;
$omg->method1();
$omg->method2();
Don't panic!
1.10.2013 12:32 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Díky, tak jsem to nemyslel, mám jednu metodu, která plní více proměnných různými výsledky.. Nástit, sice funguje ale myslím si, že to není správné řešení, jelikož to musím zbytečně tahat přes proměnnou $tmp. Snad jsem to napsal k pochopení. Díky
class Omg
{
  private $tmp;
  private $foo;
  private $bar;
  private $bar2;
 
  private function foo()
  {
    $this->method1('10');
    $this->foo = $this->tmp;

    $this->method1('20');
    $this->bar = $this->tmp;

    $this->method1('30');
    $this->bar2 = $this->tmp;

  }
  function method1($res)
  {
    $this->tmp = $res;
  }
}
 
$omg = new Omg;
$omg->foo; //10
$omg->bar; //20
$omg->bar2; //30
1.10.2013 12:34 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
!! EDIT !!

Díky, tak jsem to nemyslel, mám jednu metodu, která plní více proměnných různými výsledky.. Nástit, sice funguje ale myslím si, že to není správné řešení, jelikož to musím zbytečně tahat přes proměnnou $tmp. Snad jsem to napsal k pochopení. Díky
class Omg
{
  private $tmp;
  private $foo;
  private $bar;
  private $bar2;
 
  private function __construct()
  {
    $this->method1('10');
    $this->foo = $this->tmp;

    $this->method1('20');
    $this->bar = $this->tmp;

    $this->method1('30');
    $this->bar2 = $this->tmp;

  }
  function method1($res)
  {
    $this->tmp = $res;
  }
}
 
$omg = new Omg;
$omg->foo; //10
$omg->bar; //20
$omg->bar2; //30
Tarmaq avatar 1.10.2013 12:40 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s class v php
class Omg
{
  private $tmp;
  private $foo;
  private $bar;
  private $bar2;
  
  private function __construct()
  {
    $this->foo = $this->method1('10');
    $this->bar = $this->method1('20');
    $this->bar2 = $this->method1('30');
 
  }
  function method1($res)
  {
    return $res;
  }
}
  
$omg = new Omg;
$omg->foo; //10
$omg->bar; //20
$omg->bar2; //30
Don't panic!
1.10.2013 13:03 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Díky moc, toho použití return-u jsem se právě obával :-(
Tarmaq avatar 1.10.2013 13:05 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s class v php
Proc?
Don't panic!
1.10.2013 13:24 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Vzhledem k velkému objemu zpracovávaných dat... myslím tím, že to spolkne hodně paměti, ale lepší řešení stejně neexistuje, jedině vše překopat a použít přímo echo();
Tarmaq avatar 1.10.2013 13:29 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s class v php
tak dodej nejakej min umelohmotnej priklad, z tohohle kodu to na velke zpracovani dat nevypada..
Don't panic!
1.10.2013 13:47 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Ne, ;-) to byl jen příklad, letmé nastínění zpracovaných dat..
class Omg
{
  private $tmp;
  private $foo;
  private $bar;
  private $bar2;
   
  private function __construct()
  {
    $this->foo = $this->method1('1', '1000000');
    $this->bar = $this->method1('1000001', '2000000');
    $this->bar2 = $this->method1('2000001', '3000000');
  
  }
  function method1($res1, $res2)
  {
    # Načtu z mysql řádky od $res1 do $res2 a výsledek uložím do $ret.
    # některé sloupce v mysql obsahují data o více jak 500 znacích :-(
    return $ret;
  }
}
   
Babyčka mi říkala, nevracej to return-em, nebo jednoho krásného dne u dveří někdo zazvoní a nakope tě do prdele, a jestli nevíš kdo to bude, tak ti to řeknu, bude to server :-D
1.10.2013 14:19 Kit
Rozbalit Rozbalit vše Re: Problém s class v php
Chceš tím snad naznačit, že DB serveru posíláš 3 téměř stejné dotazy, které se liší pouze v LIMIT? Takže už víš, kam tě nakope ten DB server?
1.10.2013 14:29 Jara
Rozbalit Rozbalit vše Re: Problém s class v php
Ano, tak tomu více méně opravdu je.. víš snad o lepším způsobu? Doufám, že mi neporadíš, abych načetl celou DB a pak ji nějakým způsobem parsoval až v těch proměnných, tak výkoné železo zase nemám :-(
1.10.2013 15:37 axel
Rozbalit Rozbalit vše Re: Problém s class v php
Tak jak jsi to "letmo nastinil" je to na prvni pohled blbost. Dotahujes prvni tri miliony radku, coz lze udelat jednim dotazem. Proc by se to melo delat tremi dotazy po milionu - v cem si myslis, ze je to efektivnejsi? Jednoduse delas trikrat narocny dotaz misto abys ho udelal jednou.
1.10.2013 20:00 Kit
Rozbalit Rozbalit vše Re: Problém s class v php
Co si představuješ pod pojmem "parsoval"? To skutečně na výstup z toho PHP posíláš 3 milióny záznamů? Tak na to by sis asi nějaké silnější železo pořídit měl, protože rozdělení do tří polí nejenže nepomůže, ale navíc trojnásobně zatíží DB server.

Nevím, jak tvoje babyčka rozumí returnům, ale moje babička by mi je schválila, protože v PHP je to nejrychlejší způsob předání strukturovaného výsledku z funkce.
Josef Kufner avatar 1.10.2013 13:39 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s class v php
function hello() {
  return array('foo', 'bar');
}

list($a, $b) = hello();
nebo
function hello(& $foo, & $bar) {
  $foo = 'foo';
  $bar = 'bar';
}

hello($a, $b);
V obou případech bude nakonci platit: $a == 'foo' && $b == 'bar'
Hello world ! Segmentation fault (core dumped)

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.