NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 6 - Referenční a primitivní datové typy v PHP

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Kit
Tvůrce
Avatar
Kit:16.8.2013 11:37

S modifikací prvku pole uvnitř cyklu foreach se musí opatrně. Často je rychlejší a efektivnější vytvořit nové pole, do kterého se umístí modifikované hodnoty. Je to i čistější.

Odpovědět
16.8.2013 11:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.8.2013 11:41

No já bych použil nějaký array_map nebo něco takového, u vynucení reference uvádím že to není vhodné používat, nicméně programátor to musí umět po někom přečíst.

Odpovědět
16.8.2013 11:41
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.8.2013 12:01

Používání immutable objektů a proměnných má své výhody a vnitřní optimalizátory si s tím obykle velmi dobře poradí. Souhlasím, array_map() bývá vhodné řešení.

Pole se přes return nekopíruje. Pouze se předává odkaz. Zachází se s ním jako s immutable objektem.

Odpovědět
16.8.2013 12:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Pavel
Tvůrce
Avatar
Pavel:4.2.2015 13:16

Omlouvám se, ale pak nechápu proč by se u referenčního datového typu proměná měnila, když sou vlastně stejné ($b = $a).
Nebo mi měco uniklo?

 
Odpovědět
4.2.2015 13:16
Avatar
albertpatera
Tvůrce
Avatar
albertpatera:4.8.2015 17:05

Ahoj,

učím se OOP a narazil jsem na problém. Když jsem vložil tento kód:

$a = array(56);
    $a = $b;
    $b[] = 28;

    print_r($a);
    print_r($b);

do mého kódu, tak mi to hlásí chybu

syntax error, unexpected '$a' (T_VARIABLE), expecting function (T_FUNCTION)

Vím, že mám někde chybu, ale nevim jako :-( Několikrát jsem si to kontroloval. Přéklad bohužel není ke stažení.
Můj kód je zde:

class Clovek
{

    public $jmeno;
    public $prijmeni;
    public $vek;
    private $unava = 0;





    $a = array(56);
    $a = $b;
    $b[] = 28;

    print_r($a);
    print_r($b);

    public function __construct($jmeno, $prijmeni, $vek)
    {
        $this->jmeno = $jmeno;
        $this->prijmeni = $prijmeni;
        $this->vek = $vek;
    }

    public function spi($doba)
    {
        $this->unava -= $doba * 10;
        if ($this->unava < 0)
            $this->unava = 0;
    }

    public function behej($vzdalenost)
    {
        if ($this->unava + $vzdalenost <= 20)
            $this->unava += $vzdalenost;
        else
            echo('Jsem příliš unavený.');
    }

    public function pozdrav()
    {
        echo('Ahoj, já jsem ' . $this->jmeno);
    }

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



}

díky

 
Odpovědět
4.8.2015 17:05
Avatar
Filip Stryk
Tvůrce
Avatar
Odpovídá na albertpatera
Filip Stryk:4.8.2015 17:10

Máš to špatně opsané, v příkladu není

$a = $b

ale

$b = $a

chybu ti to hlásí proto, že do proměnné $a přiřazuješ neexistující proměnnou $b

 
Odpovědět
4.8.2015 17:10
Avatar
albertpatera
Tvůrce
Avatar
Odpovídá na Filip Stryk
albertpatera:4.8.2015 17:13

Opravil jsem to, ale stejně mi to nefunguje :-(

 
Odpovědět
4.8.2015 17:13
Avatar
Odpovídá na albertpatera
Martin Konečný (pavelco1998):4.8.2015 18:12

Do třídy nemůžeš psát libovolný kód, ale obvykle jen tyto konstrukce:

atributy

public $var;
protected $var;
private $var;

metody

public function doAction()
{
   ...
}

use statementy pro traity

use TraitClass;

... a samožřejmě komentáře

Editováno 4.8.2015 18:12
Odpovědět
4.8.2015 18:12
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Vít Cigánek:11.10.2015 12:08

Da se dat do parametru pole???

<?php

require_once('tridy/pole.php');

echo '<br />';
echo '<br />';
$pole1 = new Pole(1,2,3,4,5,6);
$pole1->zobraz();


 ?>

a třida by vypadala nějak takhle:

class Pole
{
    public $prvky = array();


    public function __construct($prvky[])
    {
        $this->prvky[] = $prvky;
    }


    public function pridej($prvek)
       {
        $this->prvky[] = $prvek;
       }

    public function zobraz()
       {
       printf_r($prvky);
       }
    }

Prosím o odpověď, docela mě to zajímá.

Editováno 11.10.2015 12:10
 
Odpovědět
11.10.2015 12:08
Avatar
d4rkw34v3r
Tvůrce
Avatar
Odpovídá na Vít Cigánek
d4rkw34v3r:11.10.2015 15:57

Ano, dá.

<?php

require_once('tridy/pole.php');

echo '<br />';
echo '<br />';
$pole1 = new Pole([1,2,3,4,5,6]);
$pole1->zobraz();

 ?>

a třída:

class Pole
{
    /** @var array */
    private $prvky;


    public function __construct(array $prvky) // pokud to má být pouze pole, lze uvést před argumentem hint
    {
        $this->prvky = $prvky;
    }


    public function pridej($prvek)
       {
        $this->prvky[] = $prvek;
       }

    public function zobraz()
       {
       printf_r($prvky);
       }
    }
Editováno 11.10.2015 15:58
 
Odpovědět
11.10.2015 15:57
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 23.