IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 6. diel - Referenčnej a primitívne dátové typy v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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ší.

Odpovedať
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
Odpovedá 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.

Odpovedať
16.8.2013 11:41
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
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?

 
Odpovedať
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

 
Odpovedať
4.8.2015 17:05
Avatar
Filip Stryk
Tvůrce
Avatar
Odpovedá 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

 
Odpovedať
4.8.2015 17:10
Avatar
albertpatera
Tvůrce
Avatar
Odpovedá na Filip Stryk
albertpatera:4.8.2015 17:13

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

 
Odpovedať
4.8.2015 17:13
Avatar
Odpovedá 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

Editované 4.8.2015 18:12
Odpovedať
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á.

Editované 11.10.2015 12:10
 
Odpovedať
11.10.2015 12:08
Avatar
d4rkw34v3r
Tvůrce
Avatar
Odpovedá 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);
       }
    }
Editované 11.10.2015 15:58
 
Odpovedať
11.10.2015 15:57
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!