Diskuze: Pomoct s OPP

PHP PHP Pomoct s OPP American English version English version

Avatar
Levin
Člen
Avatar
Levin:

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:

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:

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
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.:

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:

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:

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:

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:

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:

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.