Avatar
Levin
Člen
Avatar
Levin:16.2.2015 19:23

Ahoj, mám tyhle kody

class Clovek
{
    public $name;
    public $age;

    public function rok($rok)
    {
        if($rok == 1) echo "rok";
        elseif($rok >= 2 && $rok <= 4) echo "roky";
        elseif($rok < 4) echo "let";

        return 0;
    }

    function pozdrav()
    {
        echo "Ahoj, já jsem ".$this->name." a je mi ".$this->rok($this->age);

        return 0;
    }

}

a index.php

require 'clovek.php';

    $vendulka = new Clovek();
    $vendulka->name = "Vendulka";
    $vendulka->age = "19";
    $vendulka->rok($vendulka->age);
    $vendulka->pozdrav();

Potřebuji poradit, jak správně zavolat funkci rok, aby se správně vypsalo "Ahoj, já jsem Vendulka a je mi 19 let.

U let se mi vypisuje 0. Nemám žádný zkušenosti s opp.

Díky za radu jak upravit kód

 
Odpovědět 16.2.2015 19:23
Avatar
shaman
Člen
Avatar
Odpovídá na Levin
shaman:16.2.2015 19:30

zmen si funkciu rok asi takto:

public function rok($rok)
     {
         if($rok == 1) {
            $affix = "rok";
         }
         elseif($rok >= 2 && $rok <= 4) {
            $affix = "roky";
         }
         else
         {
            $affix =  "let";
         }
         return $rok." ".$affix;
     }
Editováno 16.2.2015 19:31
Nahoru Odpovědět  +1 16.2.2015 19:30
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Levin
Matúš Petrofčík:16.2.2015 19:35

http://www.itnetwork.cz/php/oop OOP v PHP
http://www.itnetwork.cz/php/mvc RS v OOP PHP s MVC

"Nemám žádný zkušenosti s opp." ... eee
upravíš funkciu pozdrav takto

function pozdrav()
     {
         echo "Ahoj, já jsem ".$this->name." a je mi ". $this->let . $this->rok($this->age);

         return 0;
     }
Nahoru Odpovědět 16.2.2015 19:35
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Jiří Gracík:16.2.2015 19:41

A ideálně tam nebude return.

Nahoru Odpovědět  +2 16.2.2015 19:41
Creating websites is awesome till you see the result in another browser ...
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Levin
Marek Z.:16.2.2015 19:46

U funkce rok sice zavoláš pádovaný rok, avšak jí také říkáš aby vrátila hodnotu 0.

return 0;

To znamená, že funkce rok by mohla vypadat takto:

public function rok($rok = 0){
  if($rok == 1){
      $pad = 'rok';
  }elseif($rok >= 2 && $rok <= 4){
      $pad = 'roky';
  }elseif($rok < 4){
      $pad = 'let';
  }else{
      $pad = 'roků';  //Při nule
  }
    return $rok . ' ' . $pad;
}

A pozdrav:

function pozdrav(){
    echo "Ahoj, já jsem ".$this->name." a je mi ".$this->rok($this->age);
}
Editováno 16.2.2015 19:48
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 16.2.2015 19:46
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Jiří Gracík
Matúš Petrofčík:16.2.2015 19:48

Ja si ten return ani nevšimol :[

Nahoru Odpovědět  +1 16.2.2015 19:48
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Levin
Člen
Avatar
Levin:16.2.2015 19:56

Díky

Editováno 16.2.2015 19:57
 
Nahoru Odpovědět 16.2.2015 19:56
Avatar
David Hynek
Redaktor
Avatar
David Hynek:16.2.2015 20:00

a jestli se OOP učíš, tak je skvělá funkce __toString, viz:

class TestClass
{
    public $foo;

    public function __construct($foo)
    {
        $this->foo = $foo;
    }

    public function __toString()
    {
        return $this->foo;
    }
}

$class = new TestClass('Hello');
echo $class;
Nahoru Odpovědět  +1 16.2.2015 20:00
Čím víc vím, tím víc věcí nevím.
Avatar
Levin
Člen
Avatar
Levin:18.2.2015 19:43

Jestli to správně chápu, tak funkce __toString, mi převede proměnou na na textový řetězec?
Tím si můžu vypisovat danou konkrétní proměnnou objektu?

 
Nahoru Odpovědět 18.2.2015 19:43
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Levin
Fredep:18.2.2015 19:59

Ano, pokud chceš vypsat "proměnnou objektu" (instanci) jako řetězec, například pomocí funkce echo, zavolá se tato metoda __toString(), která by měla navrátit onen řetězec, který se vypíše...

Nahoru Odpovědět  +1 18.2.2015 19:59
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.