Portál AbcLinuxu, 25. dubna 2024 16:49


Dotaz: Objasnění chybové hlášky v PHP

8.4.2012 22:01 Jiří P.
Objasnění chybové hlášky v PHP
Přečteno: 399×
Odpovědět | Admin
Dobrý večer, vysvěli by mi prosím někdo níže uvedenou chybu? Předem děkuji

Strict Standards: Non-static method news::content() should not be called statically, assuming $this from incompatible context


Ř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

8.4.2012 22:10 Kit
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Metoda news::content() nebyla deklarována jako statická a snažil ses ji volat staticky.
8.4.2012 22:23 Jiří P.
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
A co prosím přesě znamená, že jsm ji volal staticky? Jako, že jsem ji volal news::content(); ? Děkuji
8.4.2012 22:47 Kit
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Přesně tak. Buď tu metodu musíš označit jako statickou a pak ji tak můžeš volat, anebo z té třídy musíš vytvořit objekt $objekt=new news; a volat ji $objekt->content();
8.4.2012 22:54 Jiří P.
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
patrně tomu rozumíš vice než je zdrávo, zeptám se tedy ještě na jeden dotaz, co má za účel statická třída? Pokud budu volat z nějaké třídy staticky jinou třídu.. Děkuji
8.4.2012 23:09 Kit
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Ze statické třídy se nevytváří objekty, ale sama funguje jako objekt. Používá se jen v případě, kdy potřebujeme pouze jeden objekt a nechceme, aby se vytvářely další. Dělají se tak například bloky konstant a statických funkcí nebo třeba pattern Singleton.
8.4.2012 23:19 Jiří P.
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Děkuji moc za ochotu a objasnění... ;)

BTW: nedá se zavolat třída a objekt najednou?
$object = new news();
echo $object->content();
něco jako
echo new news()->content();
Dík

8.4.2012 23:34 Kit
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Dá a poměrně často to používám, i když bych to nazval trochu jinak. Ve třídě je nutné nadefinovat magickou metodu __toString(), která vrací string. Použití je pak jednoduché:
echo new news('parametry',$pro,'konstruktor');
Ještě jeden dobrý zvyk: Dávej názvům tříd velké písmeno na začátku, lépe se to čte.
echo new News('parametry',$pro,'konstruktor');
8.4.2012 23:52 Jiří P.
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Paráda, díky moc, říkal jsem poslední a už jsem to přetáhl tak ještě fakt poslední ;) a jdu spát.. Nevím jak správné zavolat z nějaké fci jinou fci ale ve stejné class. Děkuji
class Menu{
  public function menu_creating($array){
  /* kod */
  }
  
  public function user($array){
  /* Tady nevím jak zavolat fci menu_creating() */
  }

  public function user($array){
  /* Tady nevím jak zavolat fci menu_creating() */
  }
}
mess avatar 9.4.2012 11:09 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Pokud bude funkce menu_creating statická, pak Menu::menu_creating($blabla);, pokud ne (v tomhle tvém kódu není), tak $this->menu_creating($blabla);.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
9.4.2012 18:18 Kit
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
V případě statického volání metody uvnitř třídy bych raději místo
Menu::menu_creating($blabla);
použil
self::menu_creating($blabla);
viz článek na Intervalu.
mess avatar 10.4.2012 15:22 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Jasně. Jsem si neuvědomil, že už to PHP nějakou chvíli umí s tím self.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
10.4.2012 10:48 Jiří P.
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Ahoj, tak jsem to zkoušel a zjistil jsem, že pokud použiji __toString() tak nenactu zadny prametr a class ani nic nevrati :-(.. Poradí někdo? Děkuji
          class Test{

                    public function __toString($pdo){

                              $page = false;

                              foreach ($pdo->query("SELECT * FROM text LIMIT 10") as $row) {

                                        $page .= $row['nadpis']."
"; } return $this->page; } } echo New Test($pdo);
10.4.2012 11:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Pletete dohromady konstruktor __toString() viz manuál a příklad:
<?php
class Test{
  private $cnt = NULL;
  function __construct ($cnt){
    $this->cnt = $cnt;
  }
  public function __toString(){
    $r = '';
    for($i=0;$i<$this->cnt;$i++)
      $r .= "Num: $i\n";
    return $r;   
  }
  
  private function getCntPlus10(){
    return $this->cnt + 10; 
  }

  static public function Iam(){
    return  "I'am Test"; 
  }
  public function foo(){
    return self::Iam() . ", cnt + 10 = " . $this->getCntPlus10();  
  }
}
echo new Test(3),"\n\n";
$o = new Test(32);
echo $o->foo();
PS: to $page .= $row['nadpis']… lze zapsat i čitelněji $page .= "${row['nadpis']}\n";

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
10.4.2012 12:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Opravička: „Pletete dohromady konstruktor a metodu __toString()…“
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
10.4.2012 11:27 jos
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
__toString nemůže brát žádný parametry, přesuň to do konstruktoru
class Test
{
  function __construct($pdo)
  {
    $this->pdo = $pdo;
  }
  private $pdo;
  function __toString($pdo)
  {
    $page = '';
    foreach ($this->pdo->query("SELECT * FROM text LIMIT 10") as $row) {
      $page .= $row['nadpis']."\n";
    }
    return $page;
  }
}

echo new Test($pdo);

http://cz.php.net/manual/en/language.oop5.magic.php#object.tostring
10.4.2012 12:13 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP

a odsuň to z __toString($pdo)__toString() :)

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
10.4.2012 12:27 jos
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
jasný, sem vůl, špatnej copy&paste&modify
Tarmaq avatar 10.4.2012 13:08 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
doplnil bych ze od PHP 5.4.0 by melo fungovat:
echo (new news)->content();
Don't panic!
Josef Kufner avatar 10.4.2012 23:58 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Objasnění chybové hlášky v PHP
Singleton není statická třída. Singleton je objekt jako každý jiný, ale místo konstruktoru se používá statická metoda, která vrací pořád jednu a tutéž instanci.

A vůbec na statické věci a slovo static zapomeň. Dokud nevíš k čemu je, tak to nepotřebuješ. Naděláš tím víc škody než užitku. Slovíčka new a $this ti budou zatím stačit.
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.